短いコードは全体を把握しやすくデバックが楽
Applescriptはほかの言語で使われるSwitchとかの選択文がなく、if文だけで分岐させるやり方です。 ですので分岐がいっぱいあるとif分でインデントされて、横ピラミッドみたいなif文になることがあります。
if a > 0 then
if b > 0 then
if c = 0 then
set z to 1
else if c > 0 then
if d > 0 then
set z to 2
else
set z to 2.5
end if
else
set z to 3
end if
end if
end if
これは視認性が悪く、ビューティフルじゃない。 あとif分は ifとendの2行増えてしまうのでハンドラが長くなってしまって後でわかりにくくなります。 またこれだとz変数が定義されない状況が生まれ、この後のコードでzをコールするとエラーが発生します。(例えば a<0の場合とか)。
なのでif分があれば一行で処理できるようにコードを書くのがよいと思っています。
例えば
if b > 0 then
set a to false
else
set a to true
end if
こういった一般的なif分枝 これだと変数aを設定するのに5行かかりますが。
set a to true
if b > 0 then set a to false
このように記載するとend ifも記載する必要が無く2行で書けます。 if文自体は長くなりますが、この方が全体が見渡せ変数の定義漏れ等も起こりにくいです。 悪いパターンはif文の中に300行近いコードが書かれているようなものは、PC/MACの画面上でスクロールしなくてはif文の最後まで到達しなかったりします。 これは後で編集しにくいですし、予想外のバグが発生する可能性が高い悪いコードです。 if文で囲まれている空間は潜在的にプログラマーにif文内を継続的に意識させ、集中力を削りプレッシャーを持続させる事になります。
文章が短ければ、画面全体を一挙に見渡すことができますし、どこまでがif文が続くのかとか目を皿の様にして見る必要がなくなり、バグを修正しやすくなりますし、後になってコードを読もうかなという気にさせてくれます。
それはアップルスクリプトの他の構文、tell application, repeat, tryなどでも同様ですね、こういった構文が書かれるとendで囲まれるコードはインデントが自動的にされるわけですが、このインデントは出来るなら2個(ハンドラ内が既にインデント1です)、可能なら3個以内で押さえておきたいです。
真偽判定用のif文が長ければboolean変数を別に用意すべし
条件式が長くなるようなら、真偽用の変数を用意した方が条件設定がちゃんと動作しているのか確認しやすいです。
例えば
if (((a > 0) and (b > 0))) or (c > 0) then return true
return false
こういったコードが有った場合、この変数がとても長かったり、()が多かったりしてプログラマーが想定したとおりに真偽判定が行われていない可能性があります。 そういった場合1行増えますが、
set foo to (((a > 0) and (b > 0))) or (c > 0)
--return foo
if foo then return true
return false
こんな形で、条件boolean foo(名前は何でもいいんですけど)を設定しそこで真偽の条件式をやりくりして括弧の数とか中身とか、順番とかがあってるかどうかをif分に入る前にreturn foo(確認する時に行頭の --を外します)することでデバックすることができます。
特に私なんかは"集合"を考える時にいつも絵に描くか声に出して考えないと理解できなくなる体質なので、fooを使って確認することが多いです。 頭のよい方は不要なんでしょうけれど、コードは頭の悪い私たちにも理解できるように書くことが重要なんで、バグ取りがしやすいというのはとても大切です。