その他の演算子
( )
(括弧) 演算子
動作: 括弧を使用して、式内の操作が実行され る順序を制御します。括弧が使用されていない場合に操作が実行される順序を理解するために、演算子の優先順位をご覧ください。疑問がある場合は、括弧を使用して操作が望ましい順序で実行されるようにします。また、詳細については 括弧の使用法をご覧ください。
構文:
( expression )
例:
put 2 * (height + width) into perimeter
AsList
関数
動 作: asList
関数は、オブジェクト(プロパティリスト)をパラメータとして呼び出されます。最初に、オブジェクトが asList
プロパティを持っているかどうかを確認します。もしそうなら、その値が返されます。そうでなく、オブジェクトが asListExpression
プロパティを持っている場合は、そのプロパティの値が式として評価され(value()
関数を呼び出すのと同等)、リスト値が得られます。オブジェクトがこれらのプロパティのいずれも持っていない場合、asList
関数メッセージがオブジェクトとそのヘルパーに専用で送信され、その返り値が使用されます。
ターゲットがオブジェクトでない(または asList
または asListExpression
プロパティまたは asList
関数ハンドラを持っていない)場合、またはすでにリストでない場合、ターゲットの文字列値が式として評価され(value()
関数を呼び出すのと同等)、リスト値が得られます。
構文:
{the} average of numList
asList( expr )
例:
put file "scores" as a list into testScores
関連項目:
Is A
, Is Not A
, Isn't A
, Is All
, Is Not All
, Isn't All
演算子
動作: 値が特定のタイプとして有効であるかどうかを確認するか、値の内容を分析します。 number
, integer
, even number
, odd number
, positive number
, negative number
, positive integer
, negative integer
, point
, rectangle
, date
, time
, Boolean
であるかどうかをテストできます。 list
, range
, iterator
, file
, folder
, tree
, object
であるかどうかを確認するために変数をテストできます。また、値内の文字またはすべての文字が digits
, letters
, alphanumeric
, uppercase
, lowercase
, punctuation
, blank
(または whitespace
), blankOrReturn
(または whitespaceOrReturn
), controlChars
であるかどうかをテストできます。値が他のコンテナへの参照であるかどうかを確認するために、それが reference
であるかどうかをテストできます。また、オブジェクトが objectType
プロパティを定義している場合、 is a
演算子はカスタムオブジェクトタイプのテストにも使用できます(特殊プロパティの ObjectType
プロパティを参照)。
構文:
valueToTest is {not} a typeIdentifier
valueToTest is {not} all typeIdentifier
例: 次の表現はすべて "true" を返します:
put pi is a number
put pi is not an integer
put -12 is an even number
put 5683 is an odd number
put 98.6 is a positive number
put 0 isn't a positive number
put -13.2 is a negative number
put 144 is a positive integer
put -1 is a negative integer
put "123, 12.5" is a point
put "123, 12.5, 245, 25" is a rectangle
put (snow is greater than rain) is a boolean
put (a,b,c) is a list
put 14..94 is a range
put (a,b,c) is an iterator
put "July 4, 1776" is a date
put "/System/Library/Fonts/Courier.dfont" is a file
put "/System" is a folder
put (partnum:"4X56N32", qty:14) is an object
put 6 is a digit
put character 2 of "4X56N32" is a letter
put "J946Ux" is an alphanumeric
put "a" is a lowercase
put "ABCdef" isn't all uppercase
put "(),.;:!?[]{}%\’/" is all punctuation
put space is a blank
put space & tab & return is all blankOrReturn
put tab is a controlChar
put @foo is a reference
put radius:23, objectType:("Shape", "Circle") is a "Circle"
put <"[", character, "]"> is a pattern
typeIdentifier が以下に列挙された有効な識別子の いずれか、またはこれらの組み込み識別子のいずれかに評価される式でない場合、または valueToTest がオブジェクトまたはプロパティリストでない場合、エラーが発生します。
valueToTest がオブジェクトの場合、 is a
演算子は typeIdentifier をパラメータとしてオブジェクトに isObjectType
関数メッセージを送信して返された値に評価されます。この関数のデフォルトの実装は、オブジェクトの objectType
プロパティが typeIdentifier を含むかどうかをチェックします。プロパティリストに objectType
プロパティがある場合、それは単一の値または値のリストであるかもしれません。 typeIdentifier が objectType
リスト内の任意の項目と等しい場合、 is a
演算子は真に評価され、それ以外の場合は偽に評価されます。
識別子 | テストする値が真のとき |
---|---|
Boolean logical | "true" または "false", "yes" または "no", "on" または "off" |
date time | 日付または時間の値に変換できる単一の数値以外の値 |
even number | 2で割り切れる整数 |
file | フォルダではない存在するファイルのファイルオブジェクトまたはファイル名 |
folder directory | 存在するフォルダのファイルオブジェクトまたはファイル名、ただしプレインファイルではない |
integer int | 分数部分のない "全体" の数 |
iterator | リストや範囲など、反復可能な値 |
list | リスト |
negative integer | ゼロ未満の全体の数 |
negative number | ゼロ未満の数 |
number | 数 |
object propertyList | オブジェクトまたはプロパティリスト |
odd number | 2で均等に割り切れない全体の数 |
パターン | SenseTalkのパターン言語を使用したパターン定義 |
point | 2つの数のリスト、またはカンマで区切られた2つの数 |
positive integer | ゼロより大きい全体の数 |
positive number | ゼロより大きい数 |
range | 範囲 |
rectangle rect | 4つの数のリスト、2つのポイントのリスト、またはカンマで区切られた4つの数 |
reference | 他のコンテナへの参照 |
tree | 木 |
次の識別子は、テキスト値の文字のタイプをテストするために使用できます:
識別子 | テストする値のすべての文字が真のとき |
---|---|
alphanumeric | 文字または数字 |
blankOrReturn whitespaceOrReturn | スペース、タブ、またはリターン |
blank whitespace | スペースまたはタブ |
controlChar controlChars | リターン、タブ、フォーム フィードなどの非表示の制御文字 |
digit digits | 数字: 0,1,2,3,4,5,6,7,8,または9 |
letter letters | 大文字または小文字のアルファベット |
punctuation | , . ! ? ; : などの句読点文字 |
lowercase | 小文字のアルファベット |
uppercase | 大文字のアルファベット |
There Is
, There Is Not A
, There Isn't A
, There Is No
, Exists
, Does Not Exist
, Doesn't Exist
演算子
動作: ファイル、フォルダ、変数、オブジェクト、またはオブジェクトプロパティの存在をテストします。変数の場合、この演算子は変数に値が割り当てられていればtrueを返します。
構文:
there is a 存在するかもしれないもの
there is not a 存在するかもしれないもの
there isn't a 存在するかもしれないもの
there is no 存在するかもしれないもの
存在するかもしれないもの exists
存在するかもしれないもの does not exist
存在するかもしれないもの doesn't exist存在するかもしれないもの の一例は以下の通り:
file fileName
folder folderName
object objectIdentifier
property propertyName of _someObject
variable localOrDeclaredVariableName
global globalVariableName
universal universalVariableName
例:
もしフォルダ "BankReport" が存在するなら ...
例:
もしファイル "secretpasswords" が存在しないな ら ...
例:
もしオブジェクト "printHelper" が存在しないなら ...
例:
もしプロパティcostがmaterialに存在するなら ...
例:
もし変数controllerが存在するなら ...
例:
もしファイル "answers" が存在しないなら、ファイル "answers" を作成する
例:
もしプロパティsequenceがpartに存在するなら、partのsequenceに1を加える
Is Within
, Is Not Within
, Isn't Within
演算子
動作: ポイントが長方形の中にあるかどうか、長方形が別の長方形に完全に含まれているかどうか、あるいは値が特定の範囲内にあるかどうかをテストします。is within
演算子のすべての形式は、包含長方形または範囲のエッジまたはエンドポイントを含めて
包含をテストします。したがって、たとえば 9 is within 5..9
はtrueと評価されます。
ポイントは常に、ポイントのx座標とy座標を表す数のペアとして指定されます。通常、これらの2つの値は(12,42)のような2つのアイテムのリストとして与えられますが、"12,42"のように2つの数をカンマで区切ったテキスト文字列も使用できます。
長方形は4つの数字で指定され、長方形の左、上、右、下の位置を表します。例えば(5,18,105,118) - この長方形は実際には正方形で、幅と高さは共に100です。また、4つの数字を2つのポイント、つまり長方形の対角線上のポイントを説明するものと考えることもできます。長方形はまた、2つのポイントのリストとして指定することもできます。
構文:
point is {not} within rectangle
rectangle1 is {not} within rectangle2
value is {not} within range
例:
もしmousePointがwindowBorderの中にあるなら ...
例:
もしlastLoc + (12,8)が(10,10,90,50)の中にあるなら ...
例:
もしwindowRectがscreenRectの中にないなら ...
例:
もしdayが1 .. lastValidDayの中にあるなら ...
&&&
リスト結合演算子
挙動: 二つのリストまたは値を一つの値のリストに結合します。この操作の結果は、操作数の一つが空であっても常にリストになります。
構文:
operand1 &&& operand2
例:
put [1,2,3] &&& [4,5] into oneList -- [1,2,3,4,5]
例:
put oneList &&& 6 -- (1,2,3,4,5,6)
例:
put 0 &&& oneList-- [0,1,2,3,4,5]
例:
put 12 &&& 42 into luckyList-- [12,42]
Joined By
, Split By
演算子
挙動: joined by
演算子はリストまたはプロパティリストの要素をテキスト文字列に結合します。split by
演算子は逆の操作を行い、テキスト文字列を取り、それからリストまたはプロパティリストを生成します。combined
はjoined
の代わりに、with
またはusing
はby
の代わりにどちらの演算子でも使用できます。
プロパティリストを扱うときは、二つのセパレーターを使用するべきです。最初のセパレーターは要素間のテキストセパレーターを示し、二番目のセパレーターは各キーとそれに対応する値間のテキストセパレーターを指定します。リストを分割または結合するためには、単一のセパレーターだけが必要です。
構文:
sourceStructure [joined | combined] [by | with | using] separator1 {and separator2}
sourceText split [by | with | using] separator1 {and separator2}
例:
put path split by "/" into components
Example:
set newPath to components combined using "/"
例:
put {a:1, b:2} joined with ";" and "=" -- "a=1;b=2"
例:
split inputString by <character in ".,:;">
As
演算子
挙動: as
演算子はSenseTalkに対して値を特定の型として扱うよう指示するために使用することができます、または特定のスクリプトポイントで異なる表現への強制変換を行うために使用することもできます。例えば、as text
演算子は、数値として比較される可能性のある値を強制的にテキストとして比較するために使用することができます。
構文:
sourceValue as [text | {a} string | number | date | time | color | data | {a} {property} list | {an} object | {a} tree | boolean | integer | base64]
例:
if today is "April 15" as date then payTaxes
例:
performTextOperation (hours * rate) as text
例:
put "007" is equal to "7.0"-- true (numeric comparison)
例:
put "007" is equal to "7.0" as text-- false
例:
put file "cust2497" as a property list into customer
内部的に、as
演算子はasText
, asNumber
, asDate
, asTime
, asColor
, asData
, asList
, asObject
, そして asTree
関数を呼び出します。
as
演算子が存在することは、SenseTalkが"型付け"された言語であることを意味しているわけではありません。実際には、これは"型なし"の言語で、必要なときにはどのような内部表現にも値が自動的に変換されます。実際には、この演算子を明示的に使って値の内部表現を強制する必要がある状況は、比較的少数で珍しいものです。
例えば、2つの値が日付/時間の値として扱うことができるだけで、SenseTalkが自動的に日付/時間の比較を行うわけではありません。2つの値を日付/時間として比較するには、両方の値がその表現形式でなければならず、そうでなければテキストとして比較され、非常に異なる結果になります(例えば、アルファベット順では4月が1月よりも前に来ます)。これを確実にする一つの方法は、上の最初の例に示されているように、必要に応じて両方の値の後にas date
またはas time
を指定することです。
同様に、as data
は、テキスト表現ではなく、生のバイナリデータ値の直接比較を行うために使用することができます。これは最も頻繁に、バイナリデータをバイナリ形式で保持するために、バイナリデータファイルを読み書きするときに使用されます。その後、byte
チャンクタイプを使用して、データ内の個々のバイトやバイト範囲にアクセスすることができます。
as list
とas property list
(またはas object
)演算子は、やや異なります。これらは単に値がどのように扱われるべきかを示すだけでなく、要求された表現にない任意の値に対しては、その値のテキストを式として評価して(value()
関数と同様に)、要求された構造を生成します。as tree
演算子も同様に、テキストをXMLとして評価します(treeFromXML()
関数を呼び出すのと同等です)。
変換されるべき値がオブジェクトの場合、それはasText
、asNumber
などのハンドラを実装している、または要求された型に適用する特別なプロパティがある場合、各形式での表現を制御することができます。詳細は関連する as...
関数のドキュメンテーションを参照してください。
値の自動変換についての詳しい情報、およびas
演算子をいつ使用するかについては、値の変換を参照してください。
AsObject
関数
振る舞い: asObject
関数は、木構造をパラメータとして呼び出されると、the treeFormat
のuseStandardFormat
プロパティの設定に従って、木構造をプロパティリスト表現に変換します。そうでなければ、パラメータの文字列値が式として評価され(value()
関数を呼び出すのと同等)、プロパティリスト値が得られます。
構文:
{the} asObject of factor
asObject( expr )
例
set ComputerSpecs to an empty tree
set ComputerSpecs's _tag to "Gaming"
set ComputerSpecs 's RAM to 16 GB
set ComputerSpecs 's Storage to 2 TB
put ComputerSpecs -- Displays the text representation of the tree '<Gaming RAM="16 gigabytes" Storage="2 terabytes"></Gaming>'
put ComputerSpecs as an object -- Displays the property list representation '{_tag:"Gaming", RAM:"16 gigabytes", Storage:"2 terabytes"}'
関連項目:
(If ... Then ... Else ...)
演算子
振る舞い: 条件によって2つの値のうちの1つを評価します。 (if ... then ... else ...)
演算子、別名セレクタ式、は2つの値または式内のオプション値、または2つのコンテナのうちの1つを選択するために使用できます。
セレクタ式は非常に似ていますが、文が実行されるかどうかを制御する if ... then ... else ...
制御構造とは同じではありません。セレクタ式の周りには常に括弧が必要であり、常にthen
式を含める必要があります。 else
式が省略された場合、空とされます(つまり、else empty
と言うのと同じです)。コンテナを指定する場合、else
式は必要です。
構文:
( if condition then expression1 {else expression2} )
例:
put "Delivered " & count & " widget" & (if count > 1 then "s")
例
put (if a>b then a else b) into bigger
これは次のように同等です:
if a>b then put a into bigger else put b into bigger
例
then
式とelse
式の両方がコンテナを指定している場合、セレクタ式はコンテナが期待されるどこでも使用できます。
add 100 to (if a<b then a else b)-- add to whichever is smaller
これは次のように同等です:
if a<b then add 100 to a else add 100 to b -- add to whichever is smaller