Objective-C 2.0プログラミング言語: オブジェクトメッセージング
公開日:
:
最終更新日:2014/01/28
Objective-C
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
[receiver message]
[myRect display];
[myRect setOrigin:30.0 :50.0];
[receiver makeGroup:group, memberOne, memberTwo, memberThree]; // オプション引数
BOOL isFilled;
isFilled = [myRect isFilled]; // 変数とメソッドは、同じ名前を持てる
[myRect setPrimaryColor:[otherRect primaryColor]];
Objective-Cでは、nilへのメッセージ送信が可能。実行時に影響はない。
id anObjectMaybeNil = nil;
if ([anObjectMaybeNil methodThatReturnsADouble] == 0.0)
{
// 実装が続く…
}
id変数にdisplayメッセージを送信するコードを書く場合は、displayメソッドを持つオブジェクトすべてが潜在的なレシーバになります。
なんかRubyのDuck Typingみたいだなあ。
あるオブジェクトがどのクラスに所属するオブジェクトかは一切考慮せず,どのように振る舞うか(どのようなメソッドを持つか)だけに関心を払うのが Duck Typingです。Duck Typingを言い出したのは「達人プログラマ」として知られるDave Thomasです。
関数とその引数がコンパイル時にコードの中で結合されるのに対して、メッセージと受信側のオブジェクトはプログラムを実行してメッセージが送信されるまで結合されないことです。したがって、メッセージに応答するために呼び出される実際のメソッドは、コードのコンパイル時ではなく、実行時にのみ知ることができます。