on《ハンドラ名》(パラメータ1,パラメータ2,…) …… 実行する命令 …… end《ハンドラ名》関数など汎用的な機能をサブルーチン化しておけば、必要に応じていつでも使えて便利です。――例えば、AppleScriptでは数値関数がありませんから、平方根を求める関数をサブルーチンとして作ってみることにしましょう。
on sqrt(X) set X to (X * 1.0E+24) set y to 1 repeat set LY to y set y to ((X div y + y) div 2) if (y = LY) or (y = X div LY) then exit repeat end repeat set y2 to (y / 10) set y3 to (y div 10) set y4 to (y2 - y3) set y to (y3 + (round y4)) return (y / 1.0E+11) end sqrtこれ完成です。ちょっとやっていることがわからないかも知れませんが、平方根を求める公式を使って計算をしているのだと思って下さい。このサブルーチン「sqrt」を呼び出す場合には、
sqrt(10)
…という具合にすればいいわけです。これで10の平方根が得られます。
こうした関数として働く命令は、最後に「return 〜」という命令を使って、計算結果を返してやります。こうすると、結果はresultとして取り出せるようになります。
こういう場合に使うのが、グローバル変数です。これはHyperTalkと同じで、利用したいハンドラ内で、
global 《変数名》
このように定義しておくと、そのハンドラで変数が使えるようになります。複数のハンドラでこの宣言をしておくことで、ハンドラを越えて1つの変数を利用することが可能になるわけです。
これと似たものに、「属性(プロパティ)」というものもあります。これは、
property 《属性名》:《設定する値》
このように宣言します。スクリプト開始時点でこの宣言をしておくと、あとは特にハンドラ内で宣言などをしなくても、そのままこの属性が使えるようになります。
重要なのは、この属性は、「スクリプト終了後も値を保持している」ということです。つまり、次回に実行した時には、その前に実行した時の最後の値をちゃんと保った状態で動くのです。
例えば、こんなスクリプトがあったとします。
property str : "ABC" display dialog str display dialog "変更する値は?" default answer str set str to text returned of resultこれは、属性strを宣言し、その後でそれを表示してからstrの値を変更する、というスクリプトです。これを実行して新しい値を入力してやると、次に実行した時には、新しい値がダイアログで表示されるはずです。
このようにスクリプト属性は値を保持し続けるので、データの保存などに利用することが多いようです。