Smalltalkは非常にコンパクトな言語であり、最も純粋なオブジェクト指向言語の1つです。 Objective-Cは、SmalltalkとCの間の実用的な妥協点であり、非常に大きな違いがあります。たとえば、Smalltalkではすべてがオブジェクトであり、単純な数値でもあり、オブジェクトの操作はすべてメッセージ送信によるものです。メッセージは、名前に関係なく同じ順序で評価されます。だから次
8 + 9/23 + 16 * 8
は必ず左から右の順に評価されるため、オペレータ「+」、「/」と言語は数に渡されだけのメッセージであることには特別な意味を持っていません「*」オブジェクト。
Objective-CはSmalltalkスタイルのオブジェクトをCに追加しますが、Cのプリミティブ型と組み込み演算子を保持するCの厳密なスーパーセットです。したがって、Objective-Cでは、演算の通常の数学的順序が上記の式に適用されます - 除算と乗算が最初に行われ、その後の加算が行われます。
学習CはObjective-Cを完全に理解するために不可欠です。 Objective-CはCの厳密なスーパーセットであり、明示的に同じシンタックスとセマンティクスを明示的に使用します。それは、物事にどのような操作を適用するかを知らずに、物のポインタを保持するCの能力によって、オブジェクトの概念をCに移植する。次に、C構文を拡張して、オブジェクトにメッセージをポストし、オブジェクトが受け取る可能性のあるメッセージを宣言して実装する手段を提供します。
Objective-Cランタイムの一般的な設計は、特にCocoaと組み合わせると、セレクタの概念、クラスのインスタンス、階層およびシステムのためのファクトリとしてのメタクラスの使用など、Smalltalkから直接得られますモデリング・ビュー・コントローラ(Smalltalkのオリジナル、現在はほぼ普及していますが)の分割と、標準のコレクションとオブジェクトで定義された多くのメッセージです。
スモールトークは、フロー制御のシステムも大きく異なり、「ブロック」と似ているが微妙に異なるアイデアを持っています(ただし、ほとんどの新しい実装では2つが並んでいます)。 Appleは実際にObjective-Cオブジェクトの新しいメソッドの多くで利用されているCレベルの拡張としてブロックを実装しています。
ゴールドバーグスモールトーク80の本は非常によく書かれており、読みやすいと言われています。言語はとても単純で、2〜3章ですべての言語を学ぶことができます。ほとんどの複雑さは、実行時に利用できるオブジェクトに呑み込まれ、明らかにそのものは転送されません。あなたにとってのメリットは、オブジェクトとランタイムに関するイデオロギー的なものが、印刷物の特徴とは非常に異なることに終わります。逆に、Cはフロー制御や算術演算のようなものを言語機能にしています。これは実際に何が起こっているかを知る前に、より多くの構文と読み込みを意味します。
結論として、Smalltalk-80本(紫色の本)は読んだり価値がありますが、必ずしも完全に関連するわけではありません。どのような場合でも学習Cは必須です。 K & Rへの私の言及は比較のためのものです。
私はSmalltalkを知らないので、Objective-C開発者がどれくらい助けてくれないかを保証する回答は得られません。つまり、2つの異なる言語を同時に学習しようとするよりも、オブジェクト指向プログラミングのコンセプトに慣れ親しむことがより助かります。** –
前にCを学習していないObj-C ... Obj-Cの一部であるため。 – Vovanium