その他の演算子

( )演算子

挙動:丸括弧を利用して、1つの式の中で実行される演算の順序を制御します。 丸括弧を利用しない場合の演算の実行順序を把握するには、演算子の優先順位を参照してください。 不確かな場合は、丸括弧を使用して、演算が希望どおりの順序で確実に行われるようにしてください。 詳細情報は、丸括弧の使用を参照してください。

構文:

()

例:

put 2 * (height + width) into perimeter

asList関数

挙動:このasList関数は、パラメータとしてオブジェクト(プロパティリスト)と一緒に呼び出され、そのオブジェクトにasListプロパティが含まれるかどうかを最初にチェックします。 本プロパティが含まれる場合は、その値が返されます。 本プロパティが含まれておらず、かつオブジェクトに asListExpressionプロパティが含まれる場合は、プロパティの値は、リスト値を入手するために式(value()関数の呼び出しに相当)として評価されます。 オブジェクトにこれらのプロパティが全く含まれていない場合は、asList関数メッセージがオブジェクトとそのヘルパーに排他的に送信され、その戻り値が使用されます。

ターゲットがオブジェクトではなく(または、asListプロパティやasListExpressionプロパティ、もしくはasList関数ハンドラを含まない)、かつリストでもない場合は、そのターゲットの文字列値は、リスト値を入手するために式(value()関数呼び出しに相当)として評価されます。

構文:

{the} asList of factor

asList(expr)

例:

put file "scores" as a list into testScores

関連:

is ais not aisn't ais allis not allisn't all演算子

挙動:ある値が特定のタイプとして有効かどうかをチェックしたり、その値のコンテンツを分析したりします。 ユーザーは、その値が数値、整数、偶数、奇数、正数、負数、正の整数、負の整数、点、矩形、日付、時間、またはブーリアンかどうかを検証できます。 変数を検証することで、それがリスト、範囲、イテレータ、ファイル、フォルダ、ツリー、またはオブジェクトであるかどうかを確認できます。 さらに、その値に含まれる一部またはすべての記号や文字が、アラビア数字、文字、英数字、大文字、小文字、句読文字、空白(またはwhitespace)、blankOrReturn(またはwhitespaceOrReturn)、またはcontrolCharsであるかどうかも検証できます。 ある値が実際には別のコンテナの参照値かどうかは、それが参照値かどうかを検証することで確認できます。 また、オブジェクトが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

valueToTestがオブジェクトまたはプロパティリストでない限り、typeIdentifierが以下の有効な識別子の1つでない場合や、以下に示す内蔵識別子の1つを評価する式でない場合は、エラーが発生します。

valueToTestがオブジェクトの場合は、is a演算子は、typeIdentifierをパラメータとしてisObjectType関数メッセージをオブジェクトに送信することで戻される値を評価します。 この関数がデフォルトで実装されるため、typeIdentifierを含むオブジェクトのobjectTypeプロパティがチェックされます。 プロパティリストにobjectTypeプロパティが含まれる場合は、これは単一の値または値リストとなります。 typeIdentifierobjectTypeリスト内の任意のアイテムに等しい場合は、is a演算子はtrueとなり、そうでない場合はfalseとなります。

識別子

テスト値が以下のときTrue

ブーリアン
論理

「true」または「false」、「yes」または「no」、「on」または「off」

日付
時間

日付または時間値に変換可能な単一の値以外の値

偶数

2で割り切れる整数

ファイル

フォルダ以外の既存ファイルのファイルオブジェクトまたはファイル名

フォルダ
ディレクトリ

プレーンファイル以外の既存フォルダのファイルオブジェクトまたはファイル名

整数

端数部分のない「完全な」数

イテレータ

リストや範囲等の反復可能な値

リスト

リスト

負の整数

0より小さい整数

負数

0より小さい数値

数値

数値

オブジェクト
プロパティリスト

オブジェクトまたはプロパティリスト

奇数

2で割り切れない整数

パターン SenseTalkのパターン言語を使用したパターン定義

2つの数値のリスト、またはコンマで区切られた2つの数値

正の整数

0より大きい整数

正数

0より大きい数値

範囲

範囲

矩形
矩形

4つの数値のリスト、2つの点のリスト、またはコンマで区切られた4つの数値

参照値

別のコンテナの参照値

ツリー

ツリー

以下の識別子は、テキスト値に含まれる文字タイプをテストするのに使用できます。

識別子

テスト値のすべての文字が以下のときTrue

英数字

文字またはアラビア数字

blankOrReturn
whitespaceOrReturn

スペース、タブ、またはリターン

空白
whitespace

スペースまたはタブ

controlChar
controlChars

リターン、タブ、改ページなどの隠れた制御文字

アラビア数字
アラビア数字

数字:0、1、2、3、4、5、6、7、8、9

文字
文字

大文字または小文字

句読文字

, . ! ? ; :などの句読文字

小文字

小文字

大文字

大文字

there isthere is not athere isn't athere is noexistsdoes not existdoesn't exist 演算子

挙動:ファイルやフォルダ、変数、オブジェクト、オブジェクトプロパティの存在を検証します。 変数の場合は、本演算子はその変数に値が割り当てられている場合にtrueを返します。

構文

there is a thingThatMayExist

there is not a thingThatMayExist

there isn't a thingThatMayExist

there is no thingThatMayExist

thingThatMayExist exists

thingThatMayExist does not exist

thingThatMayExist doesn't exist

thingThatMayExistが次のいずれかに該当する場合は、下記例のようになります。

file fileName

folder folderName

object objectIdentifier

property propertyName of someObject

variable localOrDeclaredVariableName

global globalVariableName

universal universalVariableName

例:

if there is a folder "BankReport" then ...

例:

if there is no file "secretpasswords" then ...

例:

if there is not an object "printHelper" then ...

例:

if there is a property cost of material then ...

例:

if there is a variable controller then ...

例:

if file "answers" doesn't exist then create file "answers"

例:

if property sequence of part exists then add 1 to part's sequence

is withinis not withinisn't within演算子

挙動:ある点が矩形の内部に存在するのか、ある矩形が別の矩形に完全に囲まれているのか、またはある値が与えられた範囲に含まれるのかを検証します。 あらゆる形式のis within演算子は、内包している矩形または範囲の端または端点を含むコンテインメントを検証します。 そのため、例えば 9 is within 5..9 は、trueと評価されます。

点は、常にその点のx座標とy座標を表す一対の数値として規定されます。 通常、これらの2つの値は、(12,42)のように2アイテムのリストとして与えられますが、「12,42」のようにコンマで区切られた2つの数値を含むテキスト文字列も使用できます。

矩形は、 (5,18,105,118)のように矩形の左、上、右、下の位置を表す4つの数値として規定されます(この矩形は実際に、幅と高さが100の正方形となります)。 また、これらの4つの数値を、その矩形の対向する角の2点の描写とみなすこともできます。 矩形は、2点のリストとして規定することも可能です。

構文:

point is {not} within rectangle

rectangle1 is {not} within rectangle2

value is {not} within range

例:

if mousePoint is within windowBorder then ...

例:

if lastLoc + (12,8) is within (10,10,90,50) then ...

例:

if windowRect is not within screenRect then ...

例:

if day is within 1 ..lastValidDay then ...

&&&演算子

挙動:単一の値リストに2つのリストまたは値を加えます。 この演算の結果は、オペランドの1つが空値の場合でも常にリストとなります。

構文:

オペランド1 &&& オペランド2

例:

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 bysplit by演算子

挙動:このjoined by演算子は、リストまたはプロパティリストの要素を組み合わせてテキスト文字列を作成します。 split by演算子はこれとは逆に、テキスト文字列からリストまたはプロパティリストを生成させます。 希望する場合は、joinedの代わりにcombinedを、両演算子のbyの代わりにwithまたはusingを使用することもできます。

プロパティリストを利用して作業を行う場合は、セパレータを2つ使用する必要があります。 最初のセパレータは要素間のテキストセパレータを指定し、2つ目のセパレータは各キーとその対応する値の間のテキストセパレータを指定します。 リストの分割または統合を行う場合は、単一のセパレータのみを必要とします。

構文:

sourceStructure [joined | combined] [by | with | using] separator1 {and separator2}
sourceText split [by | with | using] separator1 {and separator2}

例:

put path split by "/" into components

例:

set newPath to components combined using "/"

例:

put (a:1, b:2) joined with ";" and "=" -- "a=1;b=2"

as演算子

挙動: このas演算子を使用すると、SenseTalkに命じてある値を特定のタイプとして扱ったり、スクリプト内の特定の箇所で異なる表現に強制的に変換させることができます。 例えば、as text演算子を使用して、数値として比較される可能性のある値をテキストとして比較するよう強制できます。

構文:

sourceValue as [text | {a} string | number | date | time | color | data | {a} {property} list

| {an} object | {a} tree]

例:

if today is "April 15" as date then payTaxes

例:

performTextOperation (hours * rate) as text

例:

put "007" is equal to "7.0"-- true (数値比較)

例:

put "007" is equal to "7.0" as text-- false

例:

put file "cust2497" as a property list into customer

技術トピック

as演算子は、asTextasNumberasDateasTimeasColorasDataasListasObject、およびasTree関数を内部で呼び出します。

as演算子の存在は、 SenseTalkが「型あり」言語であることを意味しません。 むしろSenseTalkは「型なし」言語であり、内部表現を必要とするあらゆるものにいつでも自動的に変換されます。 実際には、本演算子を使用して値の内部表現を明示的に強制する必要が生じるのは、ほんのわずかな比較的まれな状況だけです。

例えば、SenseTalkは日付/時間の比較は自動的に行いませんが、これは2つの値を日付/時間値として扱うことができるためです。 2つの値を日付/時間として比較するには、その両方の値が同じ表現である必要があります。そうでない場合は、それらの値はテキストとして比較され、全く異なる結果がもたらされます(例えばアルファベット順では、AprilがJanuaryより先に来ます)。 これを確認する1つの方法に、上記の最初の例のように、必要に応じて、両方の値の後にas dateまたはas timeと指定する方法があります。

同様に、as dataを使用することで、テキスト表現ではなく、生のバイナリデータ値の直接比較を行うことが可能です。 これは、バイナリフォーマットのデータを保存するのに、バイナリデータファイルの読み取りまたは書き込みを行う際に最もよく使用されます。 その後、byte chunkタイプを使用して、個々のバイトまたはデータ内のバイト範囲にアクセスできます。

as listas property list(またはas object)演算子は、少し異なります。 これらは、値の処理方法を指示することはほとんどありませんが、要求された表現内に存在していない値について、要求された構造を生成するためにその値のテキストを式として(value()関数と同じ方法で)評価します。 同様に、as tree演算子はテキストをXMLとして評価します(treeFromXML() 関数呼び出しに相当)。

変換する値がオブジェクトで、asTextasNumberなどのハンドラを実装する場合や、要求されたタイプに適用するスペシャルプロパティを含む場合は、各フォーマットでの表現が制御されます。 詳細は、関連するas…関数ドキュメントを参照ください。

as演算子を利用する場合や、値の自動変換に関する詳細情報について知りたい場合は、値の変換を参照してください。

asObject()関数

挙動:asObject()関数をパラメータとしてツリーで呼び出す場合は、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 //ツリー「<Gaming RAM="16 gigabytes" Storage="2 terabytes"></Gaming>」のテキスト表現を表示します

put ComputerSpecs as an object//プロパティリスト表現「(_tag:"Gaming", RAM:"16 gigabytes", Storage:"2 terabytes")」を表示します

関連:

(if ... then ... else ...)演算子

挙動:いくつかの条件に応じて、2つの値のうちの1つを評価します。 セレクタ式としても知られる(if ... then ... else ...)演算子を使用して、2つの値のうちの1つ、もしくは式に含まれるオプション値、または2つのコンテナのうちの1つを選択できます。

非常に似ているように見えても、セレクタ式はステートメントを実行するかどうかを制御するif ... then ... else ...制御構造と同じではありません。 セレクタ式は、常に前後に丸括弧を必要とし、また、常にthen式を含む必要があることに注意が必要です。 else式を省略する場合は、emptyが想定されます(すなわち、else emptyと言っているのと同じです)。 else式は、コンテナを規定する際に必要となります。

構文:

(if condition then 式1 {else 式2})

例:

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 thena else b)-- いずれか小さい方に加えます

これは、以下と等価です。

if a<b then add 100 to a else add 100 to b -- いずれか小さい方に加えます

 

This topic was last updated on 2月 01, 2019, at 11:13:23 午前.

Eggplant icon Eggplant.io | Documentation Home | User Forums | Support | Copyright © 2019 Eggplant