フロー制御
ループ内のステートメントの実行フローに影響を及ぼすことができる複数のステートメントが存在します。repeatループの実行を終了させるものとしては、ここに挙げる文以外にreturnおよびpass文があります(メッセージの操作を参照)。
next repeat
next repeat文の後に続くend repeatまでの文がスキップされ、実行が現在(最も内側)のrepeatループの先頭へ直接ジャンプで戻ります。その後は引き続き次のイテレーションが実行されます。
exit repeat
現在(最も内側)のrepeatループの実行を終了します。end repeatの後に続く次の文からスクリプトの実行が進行します。
exit handler
現在のハンドラの実行を終了し、直ちに呼び出し元のハンドラに戻ります。形態としては、exit handlerName(handlerNameに現在のハンドラ名)や、終了するハンドラの種類に応じてexit on、exit function、exit getPropまたはexit setPropも可能です。
exit all
現在のハンドラ、その呼び出し元のハンドラ、および呼び出しスタックのさらに上位のその他の全ハンドラの実行を終了します。
ハンドラを終了する
exit handler
振る舞い
現在のハンドラの実行を終了します。呼び出し元のハンドラでの実行は継続されます。
例
exit handler
exit myFancyFunction
技術トピック |
構文: exit ハンドラまたは関数名 exit [handler | script | on | function | getProp | setProp] |
ハンドラまたは関数名やハンドラタイプを与える場合、それが現在のハンドラの名前やタイプと合致していなければなりません。 |
exit all、 exit to top
振る舞い
すべてのハンドラ(現在のハンドラに加え、その呼び出し元など)の実行を停止します。
例
exit all
技術トピック |
構文: exit all exit to top |
メッセージを渡す
passコマンド
振る舞い
現在のメッセージを、メッセージパッシングパス内の次のオブジェクトに沿って渡します(前のセクションの説明を参照)。現在のハンドラの実行は終了します。
例
pass message
技術トピック |
構文: pass ハンドラ名または関数名 pass {message | on | function | getProp | setProp} |
(汎用的な「message」という用語ではなく)ハンドラ名または関数名を与える場合、その名前は現在のハンドラ名と同じでなければなりません。on、function、getPropまたはsetPropを使用する場合は、現在のハンドラタイプに合致していなければなりません。 |
Pass ... and continue |
||
振る舞いpass ... and continueを使うと、passコマンドと同じようにメッセージパッシングパス内の次のオブジェクトに沿って現在のメッセージを渡しますが、そのメッセージが他所で処理された後に現在のハンドラが実行を続行できるようになります。 |
||
例pass message and continue |
||
|
||
現在のハンドラは、メッセージパッシングパス内の後続の別オブジェクトでメッセージが処理された後に実行を再開します。その別のオブジェクトによって返された値は、pass ... and continueコマンドのすぐ後でthe resultにて利用可能です。 |
||
pass ... and continueコマンドの実行後に、(いずれかのpassコマンドを使って)そのメッセージを後から渡そうと試みても、実際にメッセージを渡すことはできません。メッセージが同じオブジェクトに2度送られることはありません。 |
Pass ... without helping |
||
振る舞いpass ... without helpingを使うと、メッセージパッシングパス内でヘルプ対象オブジェクトに続く次のオブジェクトに沿ってメッセージを渡します。passコマンドとの違いは、ヘルパー内で使用されたときに現れます。要するに、このヘルパーは「このメッセージではヘルプができない」と言っているのです。このヘルパーのヘルパーには、このメッセージを処理するチャンスは与えられませんが、メッセージは、ヘルプを受けているオブジェクトの後続のヘルパーや、メッセージパッシングパス内の後続の別オブジェクトに渡されます。 |
||
例pass message without helping |
||
|
||
このコマンドが実行されると、現在のハンドラは実行を停止します。 |
Pass original message to ... |
||
振る舞いpass original message to ...を使うと、現在のメッセージを直接別のオブジェクトに渡します。これは、現在のメッセージをメッセージパッシングパス内の次のオブジェクトに沿って渡す他のpassコマンドの形態とは異なります。 |
||
例pass original message to alterEgo |
||
|
||
この形のpassコマンドは、undeliveredMessageハンドラ内で使われ、オリジナル(未達)のメッセージを処理するために別のオブジェクトに渡そうとするものです。その別のオブジェクトがメッセージを処理すれば、それが終わりとなり、現在のハンドラの実行が終了します。別のオブジェクトがメッセージを処理しなければ、現在のハンドラでの実行は継続します。このようにして、undeliveredMessageハンドラは、処理を行えそうな1つまたは複数の別オブジェクトにオリジナルメッセージの送達を試みることができるのです。次の「Undelivered Messages」をご覧ください。 |
||
and continueを指定した場合、メッセージが渡された後、それが別のオブジェクトによって処理されても処理されなくても、現在のハンドラの実行が再開されます。 |