主に、AppleScript Studioの時代に起こったことですが、巨大なプログラムを書いていると、原因不明の異常事態に直面することがよくありました(PowerPCの時代)。
Xcode上でAppleScriptで書いたプログラムのコンパイルが通らず、Xcodeがクラッシュ。1行追加しただけでクラッシュするほどで、その追加した内容に文法的な間違いはありません。AppleScript Studioには本当に煮え湯を飲まされました。
Mac OS X 10.5の時代に「ようやく安定したか、デバッグ機能は使えないけど」と思っていたら廃止されて、Mac OS X 10.6でAppleScriptObjCに入れ替え。できることが増えたのであまり文句は言いませんでしたが、今度はドキュメントやサンプルが1つもない状況。自分がGUIアプリケーションをXcode上で書いて、Mac App Storeにアプリケーションを出せる(審査でいちゃもんがついてもかわすことができる)のも、Shane Stanleyをはじめとする先人の積み重ねがあったからこそです。
AppleScript Studioの時代に原因不明のトラブルのすえプロジェクトが瓦解した苦い経験をもとに、AppleScriptの処理系に負荷をかけない(たぶん)プログラミングを心がけるようになりました。
1行に記述する構文要素を最低限に
1行に多くの内容を詰め込むと、クラッシュやコンパイルエラーなどの原因になりやすいと感じています。本Blogに掲載しているプログラムは、1行に複数の処理を詰め込むことを極力避けています。可読性を高めるためにこう書いている、という側面もありますが……本来の目的は構文解析時のシステム負荷を最小限に抑えることにあります。
逆に、システム負荷の小さい書き方をしないと、巨大なAppleScriptのプログラムは開発途中でクラッシュを頻発する可能性があります。
構文解釈上、問題のある文字を使わない
行を書き分けする継続記号(Continuation Mark)が入っていると、行数が増えたときに謎のコンパイルエラーが発生するケースがあります。とくに、プログラムの行数が少ない場合にはエラーにならないのに、行数が増えるとエラーを引き起こします(何度も経験しました)。自分のプログラムに極力、継続記号(Continuation Mark)が入っていない理由はこれです。不等号もやや怪しいので、問題が出たら大小比較の不等号は英単語に展開しています。
if文などのネスティングの段数を減らす
つい、if文の条件を何段もネスティングして表記することがありますが、これをやると大規模なプログラムを記述したときに原因不明のクラッシュを引き起こします。
1ファイルに記述する行数を減らす
このあたりから普通のプログラミング言語っぽい話になりますが、1本で1万行といった巨大なAppleScriptを書かず、複数のScriptに分けて構文確認を通せるようにしています。目安は1,000行ぐらいなんですが、GUIをつけたプログラムだとイベントハンドラ処理部分とかGUI部品とバインディングしているプロパティ宣言部分などを外せないので、ついつい巨大になってしまいがちです。
ほかにも、言語処理系的にマイナーな仕様の表現を書かないとか(as anythingあたり)いったところでしょうか。
そうした書き方をフィードバックしてあるのが本Blog掲載のプログラムリストです。日本語環境で動作確認してあるので、中国語や韓国語の環境でも問題を引き起こす危険性が低くなっています。当然、英語などの言語圏で問題が出る可能性はさらに低いものとなります。