フローコントロール
スクリプト内のステートメント実行の流れに影響を及ぼすいくつかのステートメントがあります。
リピートループのフローを変更する
ここに挙げたステートメントに加えて、return および pass ステートメントはリピートループの実行を終了します(Messagesを参照)。
Next Repeat
next repeat ステートメントから end repeat までの後続のステートメントをスキップし、実行を現在の(最も内側の)リピートループの最初に直接戻します。その後、次のイテレーションで実行が続きます。
構文:
next repeat
Exit Repeat
現在の(最も内側の)リピートループの実行を終了します。スクリプトの実行は end repeat の次のステートメントから続きます。
構文:
exit repeat
ハンドラの終了
Exit Handler
動作: 現在のハンドラの実行を終了します。実行は呼び出しハンドラで続きます。
構文:
exit handlerOrFunctionName
exit [handler | script | on | function | getProp | setProp]
handlerOrFunctionName またはハンドラのタイプが指定された場合、それは現在のハンドラの名前またはタイプと一致しなければなりません。
例:
exit handler
exit myFancyFunction
Exit All, Exit to Top
動作: すべてのハンドラの実行を停止します(現在のハンドラとそれを呼び出したハンドラ、そしてその先のハンドラ)。
構文:
exit all
exit to [top | SenseTalk]
例:
exit all
メッセージのパス
Pass コマンド
md
構文:
pass handlerOrFunctionName
pass {the} message
_handlerOrFunctionName_が指定された場合(「message」という一般的な用語ではなく)、提供された名前は現在のハンドラの名前と同じでなければなりません。
例:
pass message
Pass ... and Continue コマンド
動作: pass ... and continue コマンドを使用して、現在のメッセージをメッセージパスの次のオブジェクトにパスします。ただし、メッセージが他の場所で処理された後でも、現在のハンドラの実行を続行します。
現在のハンドラは、メッセージがメッセージパスで後続のオブジェクトによって処理された後で実行を再開します。他のオブジェクトによって返された任意の値は、pass ... and continue コマンド直後の the result で利用可能です。
pass ... and continue コマンドを実行した後、そのメッセージをパスしようとする後続の試み(pass コマンドのいずれかを使用)は、同じオブジェクトに二度メッセージが配信されることはないため、実際にはメッセージをパスすることができません。
構文:
pass handlerOrFunctionName and continue
pass {the} message and continue
例:
pass message and continue
Pass ... Without Helping コマンド
動作: pass ... without helpingを使用して、メッセージをメッセージパスのヘルピーに続く次のオブジェクトにパスします。これはヘルパー内で使用されるときに pass コマンドと異なります。本質的に、ヘルパーは「このメッセージを助けることはできません」と言っていることになります。ヘルパーのヘルパーにはメッセージを処理するチャンスが与えられませんが、メッセージは助けられているオブジェクトの後のヘルパーやメッセージパスの後の他のオブジェクトにパスされます。
このコマンドが実行されると、現在のハンドラの実行が停止します。
構文:
pass handlerOrFunctionName without helping
pass {the} message without helping
例:
pass message without helping
Pass Original Message To ... コマンド
この形式の pass コマンドは、undeliveredMessage ハンドラ内で使用することを目的としており、元の(未配信の)メッセージを他のオブジェクトにパスして処理を試みることができます。そのオブジェクトがメッセージを処理すると、それが終わりになり、現在のハンドラの実行が終了します。他のオブジェクトがメッセージを処理しない場合、現在のハンドラでの実行が続行されます。このように、undeliveredMessage ハンドラは、元のメッセージを処理できる可能性のある1つ以上の他のオブジェクトに配信を試みることができます。詳細は、未配信メッセージの処理をご覧ください。
動作: pass original message to ... を使用して、現在のメッセージを直接他のオブジェクトにパスします。これは pass コマンドの他の形式と異なり、現在のメッセージをメッセージパスの次のオブジェクトにパスします。
and continueが指定されている場合、メッセージがパスされた後、他のオブジェクトがそれを処理したかどうかに関係なく、現在のハンドラは実行を再開します。
[**構文:**md pass original message to object {and continue}
例:
pass original message to alterEgo