繰り返し

ループは基本的にはrepeat文で記述する。ループカウンタの増分値はbyで指定するが、増分値が+1の場合のみ増分値の記述は省略できる。

repeat with i from 1 to 10
 say i as string
end repeat

repeat with i from 10 to 0 by -1
 say i as string
end repeat

リスト(配列変数)の内容でループ。いわゆるforeachみたいなもの。AppleScriptではたいへんよく使う記述。

set aList to {1, 3, 5, 7, 9}
repeat with i in aList
 set j to i as string
 say j
end repeat

アプリケーションからオブジェクトへの参照を受け取って、ループで回すような処理はよくありますが、そのオブジェクトへの参照だと「複数あるアイテムのうちの○アイテム目」といった返り方をします。

そのものズバリのデータにアクセスしたい場合には、上記のプログラムのループ中で「contents of i」とすれば、直接アクセス可能(Twitter上でコメントを観察してみたら、AppleScript初心者がよくハマる落とし穴らしい)。

単純にループ回数のみ指定することもできる。

repeat 3 times
 say “piomaru”
end

ループから途中で脱出する際には、「exit repeat」。

set a to 1
repeat 10 times
if a = 1 then
exit repeat–ここでループ脱出
end if
end repeat

repeatをネスティングして記述した場合に「exit repeat」を実行すると、1段分のみ脱出。

set a to 1
repeat 3 times
 repeat 10 times
  if a = 1 then
   exit repeat
  end if
  say “Hello”
 end repeat
  say “Goodbye”
end repeat

repeatにはwhileとかuntilなども使えたような気もするが、あんまり使ったことがない。

set a to 3
repeat while a > 1
 set a to a - 1
 say a as text
end repeat