プロパティリスト
プロパティリストはリストと似ていますが、プロパティリストとリストはともに値のコレクションです。基本的な違いは、リストが単純な値のシーケンスであるのに対し、プロパティリストの各値はそのキー
と呼ばれる名前またはラベルで識別されるという点です。プロパティリストの操作についての詳細は、Property List Operatorsを参照してください。
例:
put {x:5,y:12} into myPropList // このプロパティリストには2つのキー、xとy、およびそれぞれに対応する2つの値、5と12が含まれています。
もう1つの違いは、あまり明らかでないかもしれませんが、それがもっと重要であるかもしれません。それは、プロパティリストがSenseTalk オブジェクト
の最も単純な形式であるということで、これはプロパティだけでなく振る舞いも持っているということを意味します。このセクションの残りの部分では、主にデータコンテナとしてのプロパティリストを説明します。オブジェクトについての完全な情報については、Objects and Messagesを参照してください。
リストとプロパティリストはパラメータとして渡すことができます。パラメータとしてリストを渡す方法については、Parameters and Resultsを参照してください。
プロパティリストの作成
プロパティリストを作成するには、各プロパティのキーと値を入力し、それを中括弧で囲みます。各プロパティのキーはその関連する値の前に来て、コロンで区切られ、キー/値のペアはカンマで区切られます。
Eggplant Functional 20.1以前は、リストとプロパティリストの両方がデフォルトで括弧()を使用していました。それに対して、今は角括弧[]または中括弧を使用します(それぞれに対して)。括弧はまだプロパティリストの有効な構文と見なされていますが、それらの使用は混乱を招く可能性があるため、推奨されていません。
例:
put {name:"Elizabeth", age:14} into daughter
空のプロパティリストを指定するには、中括弧内にコロン{:}
を使用するか、フレーズempty object
またはempty property list
を使用します。
例:
put {:} into newPlist
プロパティリスト(それがオブジェクトであるため)は、テキストファイルで定義されたオブジェクトなど、他のオブジェクトによってhelpedすることができます。
例:
put {name:"Hank", age:47} helped by parent,actor into candidate
リストは行の続行(“\”)文字を使用せずに複数の行にまたがることができます:
set detective to {name: "Sherlock Holmes",
address: "221 B Baker Street, London",
remarks: "Enjoys playing violin, solving mysteries"}
プロパティリストは、中括弧 { } の代わりに括弧 () を使用することもできます。括弧を使用する場合、プロパティリスト全体が単一の行に表示される必要があります:
例:
put (beverage: "milk", food: "chocolate chips") into groceries
プロパティリストが通常のリストの最後のアイテムとして発生すると、プロパティリストの周囲から中括弧を省略することができます。このアプローチは、リスト/プロパティリストのハイブリッドのような構文をもた らしますが、名前付きプロパティは最後に来なければなりません。以下の2行は同等です:
例:
put [5, 12, {color:"Green", size:42}]
put [5, 12, color:"Green", size:42]
プロパティキー
すべてのプロパティ名(キー)はテキスト文字列です。プロパティ名が次の条件を満たす場合は、特別な処理をせずにキーを入力することができます。それは:(a) アルファベット文字またはアンダースコアで始まる場合、及び (b) アルファベット文字、数字、アンダースコアのみを含む場合です。スペースや特殊文字を含むキーを使用する場合、または数字で始まるキーを使用する場合は、キーを引用符で囲む必要があります。
例:
set oddPlist to {alpha:"ok", "87":"four score and seven", "$":50}
さらに柔軟性を持たせるために、括弧で囲まれた式を使用してキーを指定することもできます。この機能の最も一般的な使い方は、変数の値をキーとして単純に使用することですが、任意の式を使用することができます。
例:
if typeCode is 1 then set leaveType to "vacation" else set leaveType to "sick"
set leaveInfo to {employee:name, date:today, (leaveType):hoursTaken}
ここでは、3つのキー:"employee", "date", そして typeCode
変数の値に応じて "vacation" または "sick" を持つプロパティリストが作成されます。
重複キーと DuplicatePropertyKeyMode グローバルプロパティ
プロパティリスト内でキーが繰り返される場合、SenseTalkはduplicatePropertyKeyModeグローバルプロパティを使用して何が起こるかを制御します。デフォルトの設定では例外がスローされます。しかし、最初または最後の値を取るように、またはすべての値をリストに追加するように値を変更することができます。
このグローバルプロパティについての詳細は、duplicatePropertyKeyMode
を参照してください。
プロパティリストの内容
リストと同様に、SenseTalkではプロパティリストに任意のタイプの値を含めることができます。これには、リストや他のプロパティリストも含まれます。
値を割り当てる際に、式を使用することができます:
例:
put {label:12592-A,
area:pi*r^2,
dimensions:[9,8,42],
color:{top:"Red", sides:"Black"} } into currentPart
プロパティリストは順序が決まっていないため、プロパティリストを表示する際、例えば log
や put
コマンドを使用すると、SenseTalkはキーをアルファベット順に表示します。
例:
set Features to {width:9 inches,ports:16,hues:4}
log Features // Displays '{hues:"4", ports:"16", width:"9 inches"}'