ハンドラ
ハンドラはスクリプト内の_メッセージリスナー_です。オブジェクトはスクリプトを持ち、スクリプトはハンドラを持ちます。オブジェクトは特定のメッセージを受け取り、それを処理するためには、そのメッセージのハンドラへのアクセスを持つ必要があります。メッセージの詳細については、Messagesを参照してください。
オブジェクトの動作は、それが送信される可能性のある異なるメッセージをどのように処理するかによって定義されます。オブジェクトがメッセージを受け取ると、それは応答し、スクリプト化されたアクションを実行しますが、それは特定のメッセージのための_ハンドラ_を持つスクリプトを持つ場合に限ります。すべてのスクリプトは、オブジェクトが処理に興味を持つさまざまなメッセージのための1つ以上のハンドラで構成されています(スクリプトの_初期ハンドラ_を含 む、これはスクリプトと同じ名前のメッセージを処理します)。オブジェクトが一致するハンドラを持たないメッセージを受け取る場合、それはそのメッセージを無視します。
SenseTalkスクリプトは_ハンドラ_で構成されています。ハンドラは、スクリプトが特定のメッセージが送信されたときに何をするかを定義するスクリプトの一部です。主なハンドラのタイプは3つあります:コマンドハンドラ(時々_on_ハンドラと呼ばれます)、関数ハンドラ、および_汎用ハンドラ_(または_to_ハンドラとも呼ばれます)。また、特殊なタイプのハンドラである_getProp_と_setProp_ハンドラもあります。これらはPropertiesで説明されています。
ハンドラの種類
コマンド、関数、および汎用ハンドラ
メッセージハンドラの主要なタイプは3つあります:汎用、コマンド、関数ハンドラ。汎用ハンドラは to handle
(または単純に to
)で始まり、コマンドと関数のメッセージを両方処理できます。簡単にするために、コマンドと関数のメッセージを異なる方法で処理する特別な必要がある場合を除いて、常に汎用ハンドラを使用してください。コマンドハンドラは on
という単語で始まり、コマンドによって送信されたメッセージを処理します。コマンドハンドラは通常、一連のアクションを実行します。関数ハンドラは function
という単語で始まり、関数呼び出しのメッセージを処理し、値を返します。
コマンドハンドラも値を返すことがあり、関数ハンドラも値を返すことに加えてアクションを実行することがあることに注意すべきです。ハンドラのタイプ間の唯一の実質的な違いは、それらが処理するメッセージの種類です:コマンドハンドラは関数メッセージの結果として決して実行されませんし、関数ハンドラはコマンドメッセージによって決して呼び出されません。
スクリプトが同じメッセージ名のための汎用ハンドラ(to
)と特定のハンドラ(on
またはfunction
)の両方を含む場合、特定のハンドラが常に優先され、メッセージを受け取ります。 to
ハンドラはまだ他のタイプのメッセージを受け取ります。スクリプトが特定のメッセージに対してすべての3種類のハンドラを含む場合、 on
ハ ンドラはその名前のコマンドメッセージを受け取り、 function
ハンドラは関数メッセージを受け取り、 to
ハンドラは決して呼び出されません。
以下に、 greetTheUser
メッセージのための非常に単純なハンドラを示します:
to greetTheUser
put "Welcome to SenseTalk. Happy scripting!"
end greetTheUser
To*
, To Handle
キーワード
動作: to
またはto handle
キー ワードは、コマンドメッセージと関数メッセージの両方を受信できる一般的なハンドラを宣言します。ハンドラが呼び出された方法によって異なるアクションを取る必要がある場合、messageType
関数を使用してハンドラがコマンドとして呼び出されたか、関数として呼び出されたかを調べることができます。
スクリプトが_messageName_に一致するコマンドメッセージまたは関数メッセージを受信すると、このハンドラの_statements_が実行されます。ハンドラに渡される入力パラメータの値は、_messageName_に続いて宣言された対応するパラメータ名(paramName1 , paramName2, paramNameN)に割り当てられます。
構文:
to {handle} messageName {{with | of | given} {a | an | the} paramName1 {, paramName2 ...} }
statements
end [messageName | handler | to {handle}]
例:
to handle increaseSize given amount
if amount is empty then add 1 to my size else add amount to my size
end increaseSize
On キーワード
動作: on
キーワードはコマンドハンドラを宣言するために使用され、end
キーワードはそれを終了します。
オブジェクトが_handlerName_に一致するコマンドメッセージを受信すると、そのハンドラのステートメントが実行されます。ハンドラに渡される入力パラメータの値は、_handlerName_に続いて宣言された対応するパラメータ名(paramName1 , paramName2, paramNameN)に割り当てられます。
構文:
on handlerName {{with | of | given} {a | an | the} paramName1 {, paramName2 ...} }
statements
end [handlerName | handler | on]