AppleScriptにおけるハンドラ(メソッド、サブルーチン)呼び出し時の値渡し(call by value)と参照渡し(vall by reference)の記述例です。
一般的なプログラミング言語の世界の「お作法」で、ハンドラ呼び出し時に、値そのものを受けわたす「値渡し」(call by value)と、ポインタを受けわたす「参照渡し」(call by reference)の2つがあります。
AppleScriptでハンドラ呼び出し時に、パラメータを受け渡しするのは値渡しがほとんどです。これは、プログラムにバグを作りにくくするためとサブルーチン(ハンドラ)を明確に区分けするためです。
値渡ししか使っていないといっても、参照渡しができないわけではなく、パラメータとして受け取った変数の内容を変更すると参照渡しになる、という「暗黙の参照渡し」を行える仕様になっています。
ほかには、巨大なデータを値渡しするとメモリー消費がそれだけ大きくなるため、パラメータを参照渡しすることがあります。画像のRaw DataやRTFのデータ内容などがそれに該当します。
本Blog掲載サンプル(1,000本以上)のうち、参照渡しを使っているものは、
・迷路をRTFで作成して脱出経路を赤く着色する v3
・画像+文字作成テスト_v4
・Tag CloudっぽいRTFの作成
ぐらいです。
# Xcode上で記述するAppleScript Applicationでは、ARC環境ではあるものの消費したオブジェクトのメモリが解放されにくいので、割と切実に必要になってくるような
AppleScript名:値渡しハンドラ |
set aList to {1, 2, 3} set aRes to aHandler(aList) of me –> {3, 2, 1} aList –> {1, 2, 3} on aHandler(bList) return reverse of bList end aHandler |
AppleScript名:参照渡しハンドラ |
set aList to {1, 2, 3} aHandler(aList) of me aList –> {1, 2, 3, -1} on aHandler(aList) set the end of aList to -1 end aHandler |
More from my site
(Visited 325 times, 1 visits today)