テキスト演算子
SenseTalkには、テキスト値の操作に特化して使用できる複数の演算子が存在します。
&演算子
挙動:値を互いに連結させて、テキスト文字列を作成します。 両方のオペランドがテキストでない場合は、テキスト表現に変換されてから連結されます。
構文:
例:
put "The answer is:" & answer
&&演算子
挙動:2つの値の間でスペースを用いて値を結合(連結)します。 両方のオペランドがテキストでない場合は、テキスト表現に変換されてから連結されます。
構文:
例:
put "Dear" && correspondent & "," into openingLine
is in、is contained by、is not in、isn't in演算子
挙動:もう一方の値にある値が含まれるかどうかを検証し、trueまたはfalseを返します。 通常、本演算子は大文字と小文字を区別しません。 大文字と小文字を区別するには、considering caseオプションを使用します。
sourceValueがリストの場合は、本演算子はそのいずれかの値がtargetValueに等しいかどうかを検証します。 targetValueもリストの場合は、本演算子はsourceValue内の連続する値がtargetValue内の値に等しいかどうかを検証します。
sourceValueが範囲の場合は、ソース値はリスト(範囲をリストに変換する際に生成される)と同じとして扱われ、そのリスト内の値にtargetValueが存在するかどうかチェックされます。 これは、値が範囲の開始値と終了値間のどこかに存在するかどうかをチェックするis within演算子とは異なります。
sourceValueがプロパティリスト(オブジェクト)の場合は、そのオブジェクト自身、またはビルトインcontainsItem関数によって挙動を決定できます(詳細はオブジェクトのコンテンツのチェックを参照)。
targetValueがパターンで、SenseTalkのパターン言語を使用して定義される場合は、本演算子はそのパターンがsourceValue内の従属文字列と一致するかどうかを検証します。
それ以外の場合は、sourceValueはテキストとして評価され、従属文字列としてtargetValueを含むかどうかが検証されます。 sourceValueがリストまたはプロパティリストの場合に従属文字列のテキスト検索を強制するには、asText関数またはas text演算子を使用してテキストに変換します。
構文:
例:
if "--help" is in commandLine then ...
例:
if "Johnson" is not in indexList then ...
例:
put 12 is in ((11,12),(13,14)) -- true
例:
put (2,3) is in (1,2,3,4,5) -- true
例:
put (2,3) is contained by 1..5 -- true
contains、does not contain、doesn't contain演算子
挙動:もう一方の値にある値が含まれるかどうかを検証し、trueまたはfalseを返します。 通常、本演算子は大文字と小文字を区別しません。 大文字と小文字を区別するには、considering caseオプションを使用します。 これはis in演算子と全く同じ演算を実行しますが、その逆の関係を表現することも可能です。 所定の文脈において、より自然だと思われる方を使用してください。
sourceValueがリストの場合は、本演算子はそのいずれかの値がtargetValueに等しいかどうかを検証します。 targetValueもリストの場合は、本演算子はsourceValue内の連続する値がtargetValue内の値に等しいかどうかを検証します。
sourceValueが範囲の場合は、ソース値はリスト(範囲をリストに変換する際に生成される)と同じとして扱われ、そのリスト内の値にtargetValueが存在するかどうかチェックされます。 これは、値が範囲の開始値と終了値間のどこかに存在するかどうかをチェックするis within演算子とは異なります。
sourceValueがプロパティリスト(オブジェクト)の場合は、そのオブジェクト自身、またはビルトインcontainsItem関数によって挙動を決定できます(詳細はオブジェクトのコンテンツのチェックを参照)。
それ以外の場合は、sourceValueはテキストとして評価され、従属文字列としてtargetValueを含むかどうかが検証されます。 sourceValueがリストまたはプロパティリストの場合に従属文字列のテキスト検索を強制するには、asText関数またはas text演算子を使用してテキストに変換します。
構文:
sourceValue contains targetValue {considering case | ignoring case}
sourceValue does {not} contain targetValue {considering case | ignoring case}
例:
if commandLine contains " -x " considering case then ...
例:
if word n of partNums doesn't contain "q" then ...
例:
put nameList contains "Mayfield" into shouldInvite
例:
put 5..17 by 2 contains 8 -- false(奇数しか生成されないため)
例:
put ("abcd","defg") contains "abc" -- false
例:
put ("abcd","defg").asText contains "abc" -- true
is among、is not among、isn't among演算子
挙動:ある値がチャンク全体、リストアイテム、キーまたは値としてもう一方の値の中に存在するかどうかを検証します。 通常、本演算子は大文字と小文字を区別しません。 大文字と小文字を区別するには、considering caseオプションを使用します。 ChunkTypesには、任意の文字、char、単語、行、アイテム、テキストアイテム、リストアイテム、キー、値またはバイトを使用できます。
構文:
例:
put "cat" is among the items of "dog,cat,mouse" -- true
例:
put "be" is not among the words of "bell jibe amber" -- true
例:
if "cost" isn't among the keys of part then set part's cost to 10
begins with、does not begin with、doesn't begin with演算子
挙動:テキスト文字列が連続する特定の文字で始まるか、またはリストが特定の値もしくは連続する値で始まるかどうかをチェックします。 通常、本演算子は大文字と小文字を区別しません。 大文字と小文字を区別するには、considering caseオプションを使用します。
構文:
オペランド1 does {not} begin with オペランド2 {considering case | ignoring case}
例:
if sentence begins with "Joshua " considering case then ...
例:
if word n of productNames does not begin with "q" then ...
例:
if (9,12,14,23) begins with (9,12) then put "yes" -- yes
ends with、does not end with、doesn't end with演算子
挙動:テキスト文字列が特定の連続する文字で終わるかどうか、またはリストが特定の値もしくは連続する値で終わるかどうかをチェックします。 通常、本演算子は大文字と小文字を区別しません。 大文字と小文字を区別するには、considering caseオプションを使用します。
構文:
オペランド1 does {not} end with オペランド2 {considering case | ignoring case}
例:
if sentence ends with "?"then ...
例:
if word n of plurals does not end with "es" then ...
例:
if scoresList ends with (98,99,100) then resetScores
Matches演算子
挙動:matches演算子を使用すると、変数または式があるパターンと正確に一致するかどうかを検証できます。 オペランドの1つはパターンでなければならず、もう一方のオペランドは文字列値として処理されます。 本演算子は、パターンが文字列全体と完全に一致する場合にtrueを返します。 パターンが文字列の一部のみと一致する場合、あるいは全く一致しない場合は、match演算子の結果はfalseとなります。
パターンが値全体と潜在的に一致する可能性がある場合は、使用している最短一致の量指定子(デフォルト)が原因で通常のパターンマッチが文字列全体を返さないとしても、matches演算子はtrueを返します。
SenseTalkのパターン言語に関する情報は、SenseTalkのパターン言語の基本を参照してください。
構文:
オペランド1 matches オペランド2
オペランド1 [doesn’t | does not] match オペランド2
例:
put 83 matches <digit,digit> --> True
例:
put <"x", 3 chars, "y"> matches "xyzzy" --> True
例:
put <"$", digits> matches "$895" --> True
put the occurrence of <"$", digits> in "$895" —> "$8"
例:
set partNum to <"ABC", digit, char in "JQXZ", digit>
put partNum matches "Abc9Q2" --> True(「ABC」の大文字と小文字が区別されないため)
put partNum matches "Abc9Q2" with case --> False(「ABC」は大文字と小文字が完全に一致しなければならないため)