メインコンテンツまでスキップ
バージョン:23.3

その他の演算子

( ) (括弧) 演算子

動作: 括弧を使用して、式内の操作が実行される順序を制御します。括弧が使用されていない場合に操作が実行される順序を理解するために、演算子の優先順位をご覧ください。疑問がある場合は、括弧を使用して操作が望ましい順序で実行されるようにします。また、詳細については 括弧の使用法をご覧ください。

構文:
( 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 プロパティがある場合、それは単一の値または値のリストであるかもしれません。 typeIdentifierobjectType リスト内の任意の項目と等しい場合、 is a 演算子は真に評価され、それ以外の場合は偽に評価されます。

識別子テストする値が真のとき
Boolean
logical
"true" または "false", "yes" または "no", "on" または "off"
date
time
日付または時間の値に変換できる単一の数値以外の値
even number2で割り切れる整数
fileフォルダではない存在するファイルのファイルオブジェクトまたはファイル名
folder
directory
存在するフォルダのファイルオブジェクトまたはファイル名、ただしプレインファイルではない
integer
int
分数部分のない "全体" の数
iteratorリストや範囲など、反復可能な値
listリスト
negative integerゼロ未満の全体の数
negative numberゼロ未満の数
number
object
propertyList
オブジェクトまたはプロパティリスト
odd number2で均等に割り切れない全体の数
パターンSenseTalkのパターン言語を使用したパターン定義
point2つの数のリスト、またはカンマで区切られた2つの数
positive integerゼロより大きい全体の数
positive numberゼロより大きい数
range範囲
rectangle
rect
4つの数のリスト、2つのポイントのリスト、またはカンマで区切られた4つの数
reference他のコンテナへの参照
tree

次の識別子は、テキスト値の文字のタイプをテストするために使用できます:

識別子テストする値のすべての文字が真のとき
alphanumeric文字または数字
blankOrReturn
whitespaceOrReturn
スペース、タブ、またはリターン
blank
whitespace
スペースまたはタブ
controlChar
controlChars
リターン、タブ、フォームフィードなどの非表示の制御文字
stkconversion-of-values.md
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演算子は逆の操作を行い、テキスト文字列を取り、それからリストまたはプロパティリストを生成します。combinedjoinedの代わりに、withまたはusingbyの代わりにどちらの演算子でも使用できます。

プロパティリストを扱うときは、二つのセパレーターを使用するべきです。最初のセパレーターは要素間のテキストセパレーターを示し、二番目のセパレーターは各キーとそれに対応する値間のテキストセパレーターを指定します。リストを分割または結合するためには、単一のセパレーターだけが必要です。

構文:
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
Tech Talk

内部的に、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 listas property list(またはas object)演算子は、やや異なります。これらは単に値がどのように扱われるべきかを示すだけでなく、要求された表現にない任意の値に対しては、その値のテキストを式として評価して(value()関数と同様に)、要求された構造を生成します。as tree演算子も同様に、テキストをXMLとして評価します(treeFromXML()関数を呼び出すのと同等です)。

変換されるべき値がオブジェクトの場合、それはasTextasNumberなどのハンドラを実装している、または要求された型に適用する特別なプロパティがある場合、各形式での表現を制御することができます。詳細は関連する as...関数のドキュメンテーションを参照してください。

値の自動変換についての詳しい情報、およびas演算子をいつ使用するかについては、値の変換を参照してください。

AsObject関数

振る舞い: asObject関数は、木構造をパラメータとして呼び出されると、the treeFormatuseStandardFormatプロパティの設定に従って、木構造をプロパティリスト表現に変換します。そうでなければ、パラメータの文字列値が式として評価され(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