値をリストでまとめる

まとめて変数に代入する

 リストを利用すると多数の変数に、一度に値を設定することができます。

set {x, y, z} to {1, 2, 3} -- 三次元座標

 以下のスクリプトとどちらが速いかといえば、上のスクリプトよりも下のスクリプトのように分割して書いた方が実行速度は上がります。
 また、行の後ろにコメントをつけて、それぞれの変数の意味をハッキリさせる事もできますから、特にまとまった意味のある変数以外では上記の処理はあまりメリットは無いとも言えます。

set x to 1 -- x方向座標
set y to 2 -- y方向座標
set z to 3 -- z方向座標

 とはいえ、様々な応用が可能ですから、覚えておいて損はありませんし、スクリプトをスッキリさせるために積極的に使うのもいいでしょう。
 レコードを使った方法は「値をレコードでまとめる」を参照して下さい。

属性を分割して取り出す

 positionやRGB colorなど、属性の値がある特定の数のリストになっている場合は、いちいちitemごとに代入するのも面倒です。

tell application "Finder"
	set thePosition to position of (choose file)
	set x to item 1 of thePosition
	set y to item 2 of thePosition
end tell

{x, y}
--> 選択したファイルの座標

 ですが、先ほどの代入方法を利用すると、簡単に複数の変数に代入する事ができます。

tell application "Finder" to set {x, y} to position of (choose file)

{x, y}
--> 選択したファイルの座標

 断然分かりやすいし、簡単です。

 リストとして取り出すのは、属性だけではなく要素でも可能で、要素と属性を同じリストの中に混在させる事もできます。

tell application "Finder"
	{name, file 1} of disk 1
end tell

属性に値を設定する

 変数に代入する方法を応用して、多数の属性に値を設定することもできます。
 tellはアプリケーションを指定するものとして使われることが多いのですが、値(変数)やアプリケーション以外のオブジェクトを指定することもできます。

set theDate to (current date)
tell theDate to set {time, day} to {10, 1}

theDate
--> 1日10時のdate値

 残念ながら、全ての値やオブジェクトで上手く行くとは限りませんし、ある属性ではできても、別の属性ではダメだったりします。
 そんなこともあって、あまり実用的ではないかもしれませんが、dateクラスならば、比較的実用的に使えます。詳しくは「日付属性の設定方法」を御覧下さい。
 逆に使えないのは、レコードの各属性に代入する場合で、以下のスクリプトは単にx,y,zという変数に値を代入する結果となり、theCoodinatesに変化はありません。
 詳しくは「値をレコードでまとめる」を参照してください。

set theCoodinates to {x:1, y:2, z:3}
tell theCoodinates to set {x, y, z} to {4, 1,-1}

theCoodinates
--> {x:1, y:2, z:3}

属性をリストとして取り出す

 tellを使って、多数の属性をリストとして取り出すこともできます(できることもあります)

set theDate to current date 
tell theDate to {year, day, time}

 ofを使って指定することもできます(できることもあります)

set theDate to current date
{year, day, time} of theDate

 これらの処理は、個別に取り出す場合と比べて高速かと言えば、結局、変数や属性の数だけの処理が発生する上にリストの処理も必要になるので、少々速度的には落ちてしまいます。
 見た目が分かりやすかったりする場合など、場合に応じて使っていけばいいでしょう。
 また、アプリケーションやオブジェクトによっては属性をまとめて取り出す方法が別に用意されている事もあります。
 これは、properties属性として定義されている場合が多いでしょう。


2000-05-29 -2000-06-30 -2002-01-06