Smalltalk では、メソッドは独立したものではありません。
メソッドは、メッセージ sendに応答するオブジェクトの方法です。
メッセージを受信するモノがメッセージに応答する方法を知っている場合、メッセージに応答する方法があります。メッセージ名は、オブジェクトのメッセージプロトコルにあると言われています。
つまり、すべてのメッセージには受信者とメッセージ名があります。
キーワード メッセージには 1 つ以上の引数もあり、引数ごとに 1 つのキーワードがあります。
これの裏返しは、すべてのメソッドが object の一部であることです。これらは、クラス メソッドまたはインスタンス メソッドのいずれかとして、オブジェクトのクラス定義内に格納されます。
(唯一の例外は、blocksと呼ばれる無名オブジェクトの特定のケースです。これらのケースでは、メソッドはblock definitionで定義されます)。
キーワード メッセージの例を次に示します。
Transcript show: 'Hello World!'
「メッセージshow: 'Hello World!'
を受信者に送信する」ことを意味しますTranscript
。(Transcript は、システム出力を表示するウィンドウです。すべてのグラフィカルな Smalltalk 環境には、Transcript クラスがあります)。
このメッセージには 3 つの部分があります。
一番左の部分は常にレシーバーです。この例では、受信者はTranscript
です。
メッセージ名はshow:
、単一のキーワードを持つものです。show:
引数は'Hello World'
(さらに詳しい説明はTranscript show: 'Hello World!'
[ http://beginningtosmalltalk.blogspot.com/2015/11/hello-world.html]にあります。
複数のキーワードを含むキーワード メッセージの例:
aByteString copyReplaceAll: i1 with: i2
レシーバーはaByteString
、クラスのインスタンスですByteString
メッセージ名は、 とcopyReplaceAll:with:
の 2 つのキーワードがcopyReplaceAll:
ありwith:
ます。
引数はi1
とi2
です。
ByteString
クラス (または のようなクラス階層でそれより上の任意のクラス) にメソッドが含まれている場合String
、メッセージはオブジェクトのプロトコルにあります。
string1 := 'Lemon' .
string1 copyReplaceAll: i1 with: i2
必要に応じて、追加のメソッドとして、String
またはにコードを追加できます。ByteString
subst: i1 by: i2
"Substitute all instances of substring i1 with string i2.
Return the receiver"
^ self copyReplaceAll: i1 with: i2
その後、次のようにワークスペースで呼び出すことができます。
string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3
でもstring1 subst: string2 by: string3
あまり変わらない
string1 copyReplaceAll: string2 with: string3
注目すべきもう 1 つのスタイル ポイントは、キーワード メッセージ内の各キーワードは、できるだけ説明的で明確なものにする必要があるということです。 subst
またはsubstitute
_substring
メソッドをクラスに追加する最も簡単な方法は、システム ブラウザを使用することです。システム ブラウザでクラスをクリックすると、プロフォーマ メソッド定義が編集ペインに表示されます。
上書きしてAccept it
ください (私のシステムでは、2 ボタンまたは 3 ボタンのマウスを右クリックするか、「Ctrl-s」キーボード ショートカットを使用します。ただし、マウスとキーのマッピングはプラットフォームによって異なる場合があります)。