変態の仲間
あんまし変態、変態、ひっぱってもしょうがないのですが、気分的になんとなくそういうノリなので。w
Smalltalk のメッセージ式を採用した有名どころの言語には、Objective-C と SELF があります。
Objective-C
Objective-C では [ ] の中に Smalltalk の式を書きます。もともと Smalltalk のコードを C コンパイラに通すためのプリプロセッサだったので、そのまんまです。なお、Objective-C は Smalltalk のブロックをサポートしていないので、[ ] をこのように使うことで困ることはありません。(ブロックを扱えるようにした処理系は存在するらしいです。その処理系では [ ] はそのままで、ブロックには { } を使います)
あと、細かいところでちょっと違うのは、Objective-C のメッセージ式では、2つ以上引数があるセレクタで、2つめ以降のキーワードを省略して「:」のみとすることができることです。
[myRect setOrigin:30.0 :50.0];
Smalltalk ではこういうのは許されていないので、
myRect setOriginX: 30.0 y: 50.0
などとする必要があります。
SELF
SELF のメッセージ式では、レシーバが self のときこれを省略できます。できるというよりは、省略しないとトラブルのもとになります。レシーバのないメッセージ式はマヌケに見えるので、(というか、そんなものはすでにメッセージ式じゃありません!w) 個人的にはこの仕様は嫌いです。名前は SELF なのにねぇ…(いや、名前が SELF なのは、self を省略しないと self だらけになってしまうほど、self へのメッセージ送信が必然的に多くなる言語だからなのでしかたがないんですが…(^_^;))
メッセージ式に対する SELF なりの工夫としては、キーワードの大文字小文字を使い分けることをしています。複数のキーワードを持つ(つまり複数の引数を持つ)セレクタは、2つめ以降のキーワードを大文字ではじめなければいけません。
'SELF' copyMutable at: 3 Put: 'L' " => 'SELL' "
このルールにより、キーワードメッセージの最後の引数にキーワードメッセージ式を続けて記述することが可能になります。
'SELF' copyMutable at: 3 Put: 'SMALLTALK' at: 3 " => 'SELL' "
Smalltalk では括弧で括る必要があります。
'SELF' at: 4 put: ('SMALLTALK' at: 4); yourself " => 'SELL' "