式
式は、さまざまな演算子を使用して値を組み合わせて新しい値を生成します。例えば、非常に単純な式1+2は"+"演算子を使用して値3を生成します。SenseTalkは、多様なニーズに対応するための広範な演算子を提供します。
式のコンポーネントとして使用される値は、多様な型を持つことができます。それらは数値やテキスト文字列などの単純な値(Valuesで説明されています)であるか、またはコンテナの内容である値(Containers)であるかもしれません。さらに別の型の値は、function
によって提供されるものです。関数は、情報を取得するための値の源で、その情報は変化する可能性があります。SenseTalkは、幅広い目的のための多くの関数を提供しています。関数の使用に関する情報は、Functionsを参照してください。
SenseTalkは「型レス」言語であるため、コンテナは任意の型の値を保存できます:数値、テキスト、日付、リストなどです。値は必要に応じて自動的に変換されるため、例えばテキスト値に対して数学的な操作を実行すると、SenseTalkはその値を内部的に数値に変換します。内部値をテキスト形式に戻すために、SenseTalkはフォーマットを制御できるメカニズムを提供します。
演算子の優先順位
複雑な式の演算子は、その優先順位に基づいて特定の順序で評価されます。演算子の優先順位、最高(最初に評価されるもの)から最低(最後に評価されるもの)までの順序は次の通りです:
1位 | ( ) (括弧内の式は最初に処理される) |
2位 | (暗黙的な連結—以下を参照)not (論理的な否定)- , negative (単項マイナス、または否定)+ , positive (unary plus)bitNot (bitwise not) |
3位 | ^ , to the power of (累乗)squared cubed % , percent ago hence , from now repeated , repeated up to a length of as with format , using format |
4位 | * , times , multiplied by / , divided by div rem modulo , mod joined by split by rounded to rounded to nearest sorted |
5位 | + , plus - , minus adding , adding the properties of replacing , replacing the properties of removing , removing the properties of , minus property retaining , retaining the properties of renaming , renaming the properties using |
6位 | bitShift |
7位 | & (文字列を連結)&& (文字列をスペースで連結)is a multiple of is evenly divisible by but at least , but no less than but at most , but no more than |
8位 | &&& (リストを連結) |
9位 | < , is less than , comes before > , is greater than , comes after <= , is less than or equal to , is at most >= , is greater than or equal to , is at least between contains is in is among is a is within |
10位 | bitAnd (bitwise and) |
11位 | bitXOr (bitwise exclusive or`) |
12th | bitOr (bitwise or) |
13位 | = , is equal to , is <> , is not equal to , isn't begins with ends with matches |
14位 | and and if (short-circuit and) |
15位 | or or if (short-circuit or) |
同じ優先レベルの演算子が式で一緒に使用されると、左から右へと評価されます。どの場合でも、サブ式の周りに括弧を使用して、そのグループが式の他の部分よりも先に評価されるようにすることができます(以下の括弧の使用を参照)。
暗黙の連結
暗黙の連結は、文字列リテラル、定数、特定の事前定義された変数が、演算子の介在なしに連続して式に出現する場合に発生します。例えば、この式:
"Line 1" return "This is " "Line 2"
は、次の結果と同じ結果を生み出します:
"Line 1" & return & "This is " & "Line 2"
定数(return、true、false、empty、up、down)に加えて、暗黙の連結に使用できる事前定義された変数は次のとおりです:space、tab、quote、comma、slash、backslash、newline、linefeed、lf、carriagereturn、creturn、cr、crlf。
括弧の使用
括弧は、SenseTalk表現でいくつかの異なる目的に使用されます。
グループ化操作
括弧は、操作を特定の順序で実行するため、またはそうしなければ存在するかもしれない曖昧さを解消するために使用することができます。例えば、この曖昧な表現を考えてみてください:
the square root of nine plus sixteen
あなたの友人があなたに「_nine-plus-sixteen_の平方根は何ですか?」と聞いたら、あなたはすぐに9と16を加えて25を得て、それから平方根を取り、求められた答え「五」を出します(あなたはそのようなことを常にやっていますよね?)。または、彼らはmd あるいは、彼らは少し違った強調と「九」の後の短い一時停止で質問をするかもしれません。「_nine_の平方根、プラス16は何ですか?」。この場合、まず9の平方根を求めてから、その結果に16を足して求められる答え「19」を出します。
スクリプトの場合、この式にどちらの解釈を与えるかを読者に伝えるための声のヒントはありません。意味は曖昧に見える可能性があります - どちらの解釈にも解釈できます。実際には、SenseTalkの優先順位のルールが適用され、19という結果を与える方式で評価されます。もし意図した結果ではない場合、評価を最初に行いたい式の部分に括弧を使ってください。
the square root of (nine plus sixteen)
スクリプトの場合、読者にこの表現にどの2つの可能な解釈を与えるべきかを教えるための音声的な手がかりはありません。その意味は曖昧に見えるようです - それはどちらの方法でも解釈される可能性があります。実際には、SenseTalkの優先度のルールが適用され、19という結果を出します。もしそれがあなたの意図したものでなければ、式の部分の周りに括弧を使用して、最初に評価されるべき部分を明示してください:
(the square root of nine) plus sixteen
式としての評価を強制する
ある文脈では、単語はリテラル値として扱われます(それが引用符で囲まれているかのように)。そのような単語を括弧で囲むと、それが代わりに式として評価されるようになります(具体的には、それが単語一つであれば変数名として)。これは主にプロパティ名の場合に使用されます。
put account.balance
スクリプトの可読性は、スクリプ トの読者(後の日付のあなた自身を含む)がスクリプトが何をしているのかを正確に理解できるようにするために重要です。だから、組み込まれたルールがあなたが望む答えを出しても、何が意図されていたかを明確にするために括弧を含めることが良い考えかもしれません:
set balanceToUse to "balance" -- use full actual balance unless withdrawing
if action is "withdrawal" then set balanceToUse to "availableBalance"
balanceにアクセスするためには、次のように試すことができます:
put account.balanceToUse
残念ながら、この表現は、アカウントの「balanceToUse」という名前のプロパティにアクセスしようとします。これは間違った名前です。balanceToUse変数に格納されているプロパティ名を使用するには、変数名を括弧で囲むことで、それを式として評価するように強制します:
put account.(balanceToUse)
必要な括弧
いくつかの表現では括弧の使用が必要です。例えば、リストはそのアイテムを括弧で列挙し、カンマで区切ることで作ることができます。他の例としては、プロパティリスト、複数のパラメータを持つ関数呼び出し、そして(if...then...else...)セレクタ表現があります。
リストに対するベクトル算術
ベクトル算術がサポートされています。同じ数の項目を持つ2つのリストの数を足したり引いたりすることができます。これにより、2つのリストの対応する項目が足されたり引かれたりします。ベクトル操作は、対応するすべてのサブリストが等しい長さである限り、ネストしたリストでも動作します。
put [1,2,3] + [100,200,300]-- [101,202,303]
同じ長さのリストに対する乗算と除算も動作します。
put [100,200,300] / [2,10,100]-- [50,20,3]
さらに、リストを単一の値で乗算または除算することもできます(これはすべての値をスケーリングするので、「スカラ」と呼ばれることがあります)。
put [1,md 2,3] * 6 -- [6,12,18]
大文字と小文字の区別
テキスト比較演算子は通常、次の例のように、大文字小文字を区別しません:
put "FLoWeR" is "flower" -- True