![]() |
[1999 年 1 月号] |
[Happy Squeaking!!]
3.Squeak 演習:オブジェクトにメッセージを送る
3.2 様々な種類のメッセージ
Smalltalkではメッセージの種類を3種類に分割しています。
オブジェクトにメッセージを送る際に、送り手側で、なんらかのデータを受け取り側に渡してあげたいときがあります。
例えば「Aさんの銀行口座オブジェクトに、新たに3000円振り込みたい」という時に、3000円というデータを銀行口座オブジェクトに渡す必要があります。また、「#($a
$b $c)という配列オブジェクトの2番目をとりだしたい」という時には、「2番目」ということを配列オブジェクトに知らせる必要があります。
今まで紹介してきたメッセージにはこうした送り手側のデータが含まれませんでした。
'Hello Smalltalk' size. "文字列に大きさを聞く"
こうした受け渡すデータ(引数)のない単純なメッセージをSmalltalkでは単項メッセージと呼びます。
2項メッセージは、受け渡すデータを一つだけ含みます。
!%&*=,/ó ?@\~|
のどれかの記号を任意にえらんでメッセージ名とします。
これらの記号は、2項メッセージ専用として予約されています。
"3オブジェクトに+メッセージを送る、引数は1"
3 + 1.
"文字列オブジェクト'Hello'に連結を行う。引数は'Smalltalk"
'Hello', 'Smalltalk'.
通常、数字や文字列などの単純なオブジェクトに対するメッセージ送信で、2項メッセージは使われます。
それでは以下の実行結果はどうなるでしょうか。
3 + 5 * 4
これは、Smalltalkでは32 になります。
3 オブジェクトに +
のメッセージが送られ、引数は5です。
結果として返るオブジェクトは 8、次に *
メッセージが 引数 4で送られ、32というオブジェクトが返ってくることになります。
Smalltalkでは演算子といったものを特別扱いしません。あくまでオブジェクトに対してメッセージが順番に送られることになります。
キーワードメッセージには一つ以上のパラメータ(引数)が含まれます。
メッセージ名に: (コロン)が含まれるのが特徴です。
データはそのコロンの後に指定されます。
引数1つの場合
"Transcript にshow:
メッセージを送る。引数は'HelloWorld"
Transcript show: 'HelloWorld'
"配列オブジェクト #($a $b
$c)の2番目を取り出す"
#($a $b $c) at: 2
引数2つの場合
"文字列オブジェクト
'HelloSmalltalk' の2番目から5番目を取り出す"
'HelloSmalltalk' copyFrom: 2 to: 5.
引数3つの場合
"文字列オブジェクト
'HelloSmalltalk'の2番目から5番目を'appy'に変更する"
'HelloSmalltalk' copyReplaceFrom: 2 to: 5 with: 'appy'
以下4つ、5つと同じように続きます。
Cなどの言語では、引数が複数ある関数は、()で括りコンマで区切ることで指定を行います。
上記の例だとcopyReplace(2,5,'appy')
などとなります。
Smalltalkの場合、引数の区切りを、コンマ記号でなく、キーワードとしてコロンが末尾についた任意の英字で書ける(この場合to:や
with: )ので、非常にそれぞれの引数の意味をわかりやすくできます。
なお、キーワードメッセージは一続きでメッセージ名とみなされます。順番を入れ替えた場合は別のメッセージとなります。
anObject to: 3 from: 5と anObject from: 5 to: 3
は別ものです。片方がto:from:というメッセージ名で、後者がfrom:to:というメッセージ名になります。
SmallTip: メッセージには単項、2項、キーワードの3種類がある。 |
© 1999-2001 OGIS-RI Co., Ltd. |
|