ONとOFFを交互に繰り返す処理を書きたい場合が少なからずありますが、多分一番基本的なのは、真偽値を使う方法です。
変数の中身が真ならば偽に、偽ならば真に変えて、それぞれの処理を行います。
set theBoolean to true
repeat 10
if theBoolean = true then
display dialog "表"
set theBoolean to false
else
display dialog "裏"
set theBoolean to true
end if
end repeat
たぶん、以上のようなスクリプトを書くのでは無いかと思いますが、これならば、表か裏かを記録しておく変数の値は、別に真偽値である必要もありません。
ですが無駄な部分を省くと、以下のように書けます。詳しくは「判定文と真偽値」の項を参照してください。
set theBoolean to true
repeat 10
if theBoolean then
display dialog "表"
else
display dialog "裏"
end if
set theBoolean to not theBoolean
end repeat
「set theBoolean to not theBoolean」は、トグル処理の基本です。
真偽値を逆転させることと良く似た処理として、数値の頭に負の記号をつけて、正負を逆転させる方法があります。
これを利用して、先ほどのスクリプトを書き換えてみましょう。
set theNum to 1
repeat 10 times
display dialog item (2 + theNum) of {"裏", "ダミー", "表"}
set theNum to - theNum
end repeat
先ほどのスクリプトと良く似ていますが、表示のところでリストを利用することによって、さらに短くかけました。
if文を使っていないので、ちょっとスクリプトが理解しづらいのが難点ではありますが、数字を引数に利用する命令は非常に多いので、数字を使った方が何かと応用範囲が広がるということはあります。
例えば、二つの項目を持ったリストの場合、最初の項目はitem 1であると同時にitem -2でもあります。
このあたりを利用する手もあります。
set theNum to 1
repeat 10
display dialog item theNum of {"表", "裏"}
set theNum to - theNum
end repeat
"表"が1、"裏"が-1になります。これだとダミーを入れることも無くて、格好がいいですね。
ちなみに、初期値に2を入れると、"表"が-2、"裏"が2になりますから、それでもちゃんと動きます。
初期値を0.5に設定して、「item (0.5 + theNum) of {"裏", "表"}」とする手もありますが、実数を使うのもあまり格好よくありません。
このような、2つの数値を交互に繰り返す処理は、そこそこ必要になる処理です。
簡単な足し算と引き算の組み合わせですが「2つの数値の合計から、現在の数値を引く」と、もう一つの数値が得られると言うことを利用して、スクリプトを書き換えます。
set theNum to 1
repeat 10
display dialog item theNum of {"表", "裏"}
set theNum to 3-theNum
end repeat
if文を多用すれば、大抵どうにかなってしまうのですが、これらの方法を使い分けると、よりスマートなスクリプトが書けるようになるでしょう。
if文を多用すると、実行スピードが落ちたり、インデントが深くなってスクリプトが見にくくなるデメリットもあります。
あまりif文にばかり頼るのも考えものでしょう(if文を嫌いすぎるのもいけませんが)
ついでに、8と15を交互に表示するスクリプトを作ったので、参考にしてください。
set theNum to 8
repeat 10
display dialog theNum
set theNum to 23-theNum
end repeat
8+15=23ですから、そこから現在の値を引いているというわけで、簡単な理屈です。
二つのものならば、以上のような感じで、だいたい大丈夫だと思いますが、3つ以上のものとなると、まともにやると以下のようになります。
set theNum to 1
repeat 10
display dialog item theNum of {"アン", "ドゥ", "トロワ"}
if theNum = 3 then
set theNum to 1
else
set theNum to theNum+1
end if
end repeat
modは整数を割った余りを求める演算子ですから、例えば3で割ると、答えは0,1,2の三種類のいずれかの数値になります。
これを利用してスクリプトを書き換えてみました。
repeat with i from 1 to 10
display dialog item ((i mod 3) + 1) of {"トロワ", "アン", "ドゥ"}
end repeat
同じ理屈で、さらにスクリプトを書き換えました。
nが0,1,2を繰り返します。
set n to 0
repeat with i from 1 to 10
set n to (n + 1) mod 3
display dialog item (n + 1) of {"トロワ", "アン", "ドゥ"}
end repeat
応用編として、ファイルに7色+無色の8つラベルを順につけていくスクリプトです。
Finderで処理したいファイルを選択した後、実行します。
tell application "Finder"
set theList to selection
repeat with i from 1 to number of theList
set label index of (item i of theList) to i mod 8
end repeat
end tell