また、いつまででも繰り返すスクリプトも作成できます。
repeat
繰り返したい処理
end repeat
この場合、途中の処理でrepeatブロックを抜け出す文を入れておかないと繰り返し処理を止めることができずに、いわゆる「フリーズ状態」になります。
アプリケーションなどがフリーズしてしまったときは[command + option + esc]キーで強制終了、もしくはリセットボタンなどで強制再起動を行う必要がありますが、AppleScriptの場合は[command + . ]キーでスクリプトを終了させることができます。
また、このようなスクリプトを「永久ループ」と呼びます。
では、repeatブロックを抜け出す文を記述してみましょう。
if〜then
文とexit repeat文を組み合わせて使います。
if 条件式 then exit repeat
exit repeat
文は、あらゆる書式のrepeatブロックで使えます。
また、繰り返し処理を終了する条件は複数設定することも可能です。
では2分の1の確率、もしくはダイアログで「いいえ」を選択した場合に処理を終了するスクリプトを作ってみましょう。
repeat
set theBoolean to some item of {true, false}
if theBoolean then exit repeat
display dialog "繰り返します" buttons {"いいえ","はい"}
if button returned of result = "いいえ" then exit repeat
end repeat
このスクリプトでsome item of {true, false}
の部分は、次のような参照形式になっています。
some クラス of コンテナ
これは「任意要素参照形式」と呼ばれており、コンテナから要素をランダムに1つ取り出します。
以前紹介したOSAX命令の1つであるrandom number
命令を使うよりも高速に処理できるうえ、見た目もわかりやすい点が特徴です。
ちなみに、「some クラス of コンテナ」の任意要素参照形式を、random number
命令を使って書き換えると、次のようになります(「n」はコンテナに含まれる要素数)。
クラス (random number from 1 to n) of コンテナ
また、「random number」などのOSAX命令は呼び出しに時間がかかるため、スクリプトの処理速度が低下する傾向にあることを覚えておきましょう。