特殊セレクター
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 03:18 UTC 版)
「Smalltalk」の記事における「特殊セレクター」の解説
Smalltalkでは高速化のためいくつかのメッセージを特別扱いする。これを特殊セレクター(英: special selector)という。典型的な例は#ifTrue:ifFalse:である。下記のコードはでは「ifTrue: [5] ifFalse: [6]」を評価した時にメッセージが送られる訳ではなく、バイトコードレベルでインライン展開され飛越し命令の表現に置き換えられる。このため実際にifTrue:ifFalse: という名のメソッドが呼ばれることもない。また、trueやfalse以外に上記のようなBoolean用のメッセージを送ると処理系によってはMustBeBoolean例外を発生させる。このように頻繁に使用する分岐や反復を特別扱いすることで性能低下を防いでいる。 3 < 4 ifTrue: [ 5 ] ifFalse: [ 6 ]. セレクターと名がつくが特殊セレクターは、特別扱いする条件が引数の状態を含んでおり、たとえ同じセレクターを使ったメッセージでも引数が条件に一致しなければ特別扱いしない。例えば下記のように引数に直接ブロックを指定していない場合では多くの処理系(VisualWorks, GNU Smalltalk等)は特別扱いせずメッセージ送信を実行する。 | then else |then := [ 5 ].else := [ 6 ].true ifTrue: then ifFalse: else. 特殊セレクターはあくまで高速化の手段であるため種類は処理系によって異る。どの処理系が何を特殊セレクターとして扱うかは処理系ごとに提供される説明資料に記述されている。
※この「特殊セレクター」の解説は、「Smalltalk」の解説の一部です。
「特殊セレクター」を含む「Smalltalk」の記事については、「Smalltalk」の概要を参照ください。
- 特殊セレクターのページへのリンク