GO BACK

初心者のためのAppleScript教室


「ユーザー定義ハンドラ」


■スクリプトのサブルーチン化


HyperTalkなどで汎用性のあるスクリプトをユーザー定義命令のようにしておけるのと同様に、AppleScriptでもスクリプトをユーザー定義としてサブルーチン化しておくことができます。これは、次のような形となります。


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として取り出せるようになります。


■属性とグローバル変数


こうしたハンドラを使うと、唯一問題となるが変数です。AppleScriptでは、変数は同じハンドラ内でしか使えません。ですから、必要な値は全てパラメータとして受け渡してやらないといけなくなります。

 こういう場合に使うのが、グローバル変数です。これはHyperTalkと同じで、利用したいハンドラ内で、


global 《変数名》


このように定義しておくと、そのハンドラで変数が使えるようになります。複数のハンドラでこの宣言をしておくことで、ハンドラを越えて1つの変数を利用することが可能になるわけです。

 これと似たものに、「属性(プロパティ)」というものもあります。これは、


property 《属性名》:《設定する値》


このように宣言します。スクリプト開始時点でこの宣言をしておくと、あとは特にハンドラ内で宣言などをしなくても、そのままこの属性が使えるようになります。

 重要なのは、この属性は、「スクリプト終了後も値を保持している」ということです。つまり、次回に実行した時には、その前に実行した時の最後の値をちゃんと保った状態で動くのです。

 例えば、こんなスクリプトがあったとします。


property str : "ABC"

display dialog str
display dialog "変更する値は?" default answer str
set str to text returned of result

これは、属性strを宣言し、その後でそれを表示してからstrの値を変更する、というスクリプトです。これを実行して新しい値を入力してやると、次に実行した時には、新しい値がダイアログで表示されるはずです。

 このようにスクリプト属性は値を保持し続けるので、データの保存などに利用することが多いようです。

GO NEXT


GO HOME