変数


 スクリプトの中で、一時データを収納しておくためのものです。収納できるデータは色々ありますが、テキストや数(整数や実数)はもちろん、リストやレコード、果ては「アイコン」まで様々な型が存在します。

 変数は使いたいときに自由に作ることができます。またそのデータの型は、比較的簡単に変更することができます。次の例では、数を格納している「aNum」という変数を、文字列に変換します。

    set aNum to 5
    set aNum to aNum as string

 この結果、aNumの内容は"5"という文字列になります。尚、はじめてスクリプトやプログラムに触れる人にとっては分かりにくいことですが、変数はそれ自身の値を使用して代入することができます。上の例では、aNumという変数は文字列に変換されたaNumによって置き換えられます。またaNumを1増やしたい場合などにもこの方法は使われます。

    set aNum to 5
    set aNum to aNum + 1

 これにより、aNumは「6」になります。

 変数名の付け方は、リファレンスを参考にして下さい。当然AppleScriptの予約語(スクリプト中で意味を持つ語)は使用できませんし、いろいろと法則があります。しかし、とりあえず英語表現形式では「最初の文字に数字は使えない」「アルファベットと数字、アンダースコア(_)以外は使えない」ということさえ頭に置いておけば大丈夫でしょう。

 スクリプトの扱えるデータは「文字列(string)」「数(number)、整数(integer)、実数(real)」「真偽値(boolean)」などがあります。-- 参照

 とりあえず、「文字列」… "サンプル"、「数」… 4、「真偽値」… true(またはfalse)の様に表現されることを知っていればいいでしょう。

 データを連結するときには「&」を使用します。例えば"AAA"と"BBB"を連結したいときは

"AAA" & "BBB"

 と記述すれば"AAABBB"となります。ただし数のようにそれ自身が連結できないものは次に説明する「リスト」として連結されます。また文字列と数のように異なったデータ型のデータを連結しようとすると、左側のデータ型に型変換してから連結します。

"AAA" & 3

 上の例では、"AAA3"という文字列が返されます。また、

3 & "AAA"

 とすると、数を連結することはできないので { 3, "AAA" } というリストが返されます。


 さて、スクリプトのデータ型の中で、使えれば非常に便利なものに「リスト」と「レコード」があります。

 「リスト」は、複数のデータを一つの変数に収めるものです。例えば、{ "柏餅", 12, Wednesday } の様に、異なったデータ型を持つデータをいくつも持ったリストを作ることができます。もちろん、リストの中にリストを収めることもできます。

 それぞれの項目は、その項目の番号によって指定されます。例えば

get item 2 of { "柏餅", 12, Wednesday }

 とすれば、「12」が得られます。また

set item 2 of { "柏餅", 12, Wednesday } to 15

 とすれば、もとのリストは { "柏餅", 15, Wednesday } となります。

 リスト同士の連結は、 { "柏餅", 15, Wednesday } & { 46, "Fine" }とすれば { "柏餅", 15, Wednesday, 46, "Fine" } の様にそのまま連結します。

 さらに型変換のため、「 { "柏餅", 15, Wednesday } & 46 」 とすると { "柏餅", 15, Wednesday, 46 } となります。


 次は「レコード」です。

 「レコード」は「リスト」によく似ています。リストは項目を取り出すのに番号を使用しましたが、レコードでは各項目に「ラベル」を付け、それを使用して項目を指定します。

{ name : "Karino", age : 24, sex : "男性" }

 例えばこのレコードの名前を知りたければ、「get name of { name : "Karino", age : 24, sex : "男性" }」とすれば "Karino" が返されます。

 「レコード」はそれに収められている項目がどういう順番であるか、あるいはいくつの項目を持っているのかを全く考慮せずにすむため、複雑なデータの集合を扱うときには重宝します。例えばあるファイルの情報を「info for file "xxx"」として取ると、

{name:"YooEdit 1.63", creation date:date "1995年 9月 8日 金曜日 3:26:10 AM", modification date:date "1995年 9月 8日 金曜日 3:26:19 AM", icon position:{192, 0}, visible:true, size:214437, folder:false, alias:false, locked:false, file creator:"YoED", file type:"APPL", short version:"1.63", long version:"1.63, (C)1988-1995 Yooichi Tagawa"}

  の様な形のレコードが返されます。これをリストで扱おうとすると、ユーザは常にどの情報が何番目にあるかを考えなければなりませんし、項目の内容が変化した場合(例えばフォルダの場合はfile creatorやfile typeは存在しない)、その番号が変わってしまう可能性もあります。しかしレコードなら、必要な情報は常にラベルを指定するだけで得ることができるわけです。

 レコード型のデータはレコード型のデータとしか連結できません。また同じラベルの項目があったときは左側のレコードの項目が優先され、右側の項目は無視されます。例えば

{ name : "Karino", age : 24 } & { height : 175 }」では
{ name : "Karino", age : 24, height : 175 }」となりますが、

{ name : "Karino", age : 24 } & { name : "Yano", height : 176 }」は
{ name : "Karino", age : 24, height : 176 }」となってしまいます。


 リストとレコードは、しばしば組み合わせて使用されます。例えば名簿を変数に取り込みたい場合、それぞれのメンバーの情報はレコードで扱い、それをリストに収めれば扱いが非常に楽になります。

{{ name : "Karino", age : 24 }, { name : "Yano", age : 24 }}

 こうすることによって、それぞれの情報を非常に簡単に得ることができるようになります。

    set MemberList to {{ name : "Karino", age : 24 }, { name : "Yano", age : 24 }}
    get name of item 2 of MemberList

 上の例では、"Yano"が返されます。


 以上で変数の説明は終わりです。後はリファレンスや教科書で勉強して下さい。

Reference

次へ進む

AppleScriptの使い方に戻る
このホームページに関するお問い合わせは、karino@drycarbon.comまで。