値
数値
SenseTalkでは、数字を用いて数値を記述できます。
1
634
12.908
-3
.5
18.75
または、単語を用いて同様に記述できます。
one
six hundred thirty-four
twelve point nine zero eight
negative three
one half
eighteen and three quarters
大きな数をより読みやすく表現するためには、コンマの代わりに下線符号を使用できます。したがって、1300000の代わりに1_300_000と表現できます。
技術的なアプリケーションでは、16進数表記(「0x」で始まる)と指数表記(「e+」または「e-」の後に10の累乗数を記す)も認められます。
0x8ce3
4.58e+6
また、長さや距離、重量、角度などの場合のように、数と一緒に単位を指定できます。単位に関する詳細情報は、単位を持つ数の利用を参照してください。
テキスト
SenseTalkでは、テキストは通常、直線状の二重引用符で囲まれます。
"abc"
"The Lord of the Rings"
"Greetings, and welcome to the world of computing!"
すべての国際テキスト(Unicode)がサポートされます。しかしながら、引用符付きのテキスト文字列内において、表現しにくいいくつかの文字が存在します。コンピュータの混乱を避けるために、特に二重引用符そのものを、引用符内で使用しないようにしてください。SenseTalkでは特別な単語quoteを利用して、二重引用符を表現できます。これは、以下のように使用できます。
"John said " & quote & "Hello!" & quote
アンド記号(&)はテキスト同士を結び付けて1つの長い文字列を作成するため、上に示した式は以下のテキストとして表されます。
John said "Hello!"
引用符付きのテキスト内に直接組み込むことのできないその他の文字に、あるテキスト行を次のテキスト行と区別するのに使用するリターン文字があります。SenseTalkにおいて、単語returnはリターン文字を表します。
"This is line 1." & return & "This is line 2."
テキストにこのような文字を組み込むその他の方法として、二重山括弧のペア(<<と>>)を使用する特別な方法があります。二重引用符の代わりに二重山括弧のペアを使用することで、引用符とリターン文字を直接組み込むことができます。
<<John said "Hello!"
This is line 2. >>
ご利用のキーボードで「波状の」引用符を入力する方法を知っていれば、これも使用できます。引用符は、テキストの先頭の初め引用符と末尾の終わり引用符を常に対にして使用する必要があります。
"John said "Hello!""
テキストの複数行のブロック
複数行にまたがる長いテキストのブロックをスクリプトに組み込む必要がある場合は、二重波括弧{{ }}を使用する特別なメカニズムを利用できます。
このようなブロック型の引用は、二重山括弧<< >>を使用する方法とは異なります。引用符付きのコンテンツは、始め二重波括弧{{の後の行から始まり、終わり二重波括弧}}(行の最初に空白なしで使用しなければならない)の前の行で終わります。
put {{
This is my "quoted" text.
}} into statement
-- ステートメントに「This is my "quoted" text.」と組み込まれます
始め二重波括弧の後のリターン文字も終わり二重波括弧の前のリターン文字も、引用符付きのコンテンツの一部としては扱われないため、引用符付きのコンテンツの先頭または末尾にリターン文字を組み込みたい場合は、ブランク行を挿入する必要があります。
このような波括弧の引用符は、スクリプト内に長いテキストの引用ブロックを簡単に組み込めるようにする意図があります。終わり波括弧は行の先頭でのみ認識されるため、二重波括弧はそれぞれ、引用符付きコンテンツ内で別々に表示されます。より長いコンテンツを引用できるようにするために、始め波括弧の後に識別子を置く場合があります。その後、引用符付きのコンテンツを終わらせるために、全く同じ識別子(大文字小文字を区別する)を終わり波括弧のすぐ前に置く必要があります。識別子には、波括弧以外の非空白文字を使用できます。異なる識別子を使用すると、引用符付きのテキストブロックを別のブロック内でネスト化することが可能になります。
set the script of Talker to {{TalkerScript
on speakUp
put {{InnerQuote
This is my "quoted" text, and I am prepared to use it.
InnerQuote}} into my statement
put statement
end speakUp
TalkerScript}}
論理(ブーリアン)値
論理値(ブーリアン値とも呼ばれる)は、trueまたはfalse、yesまたはno、onまたはoffを表します。SenseTalkでは、このような論理値は定数のtrueとfalseで表されます。
また、trueまたはfalseとして評価される多くの演算子や式も存在します(式を参照)。論理値を使用すると、if...then...else構造に含まれる特定のコマンドを実行するかどうかを選択できます(条件文を参照)。
ifステートメントの条件を検証する場合は、SenseTalkは定数値のtrueまたはfalseだけではなく、「yes」、「no」、「on」、「off」または「」(空)として評価される任意の式を承諾します。「true」、「yes」および「on」の値はすべてtrueとして扱われ、「false」、「no」、「off」および「」はすべてfalseとして扱われます(これらはすべて大文字と小文字を区別せず、大文字または小文字のみ、または大文字と小文字を混在させて利用できます)。論理値を必要とする文脈においてその他の値を使用すると、例外が投げられます。
定数と事前定義済みの変数
trueやreturnのような語は、変更できない定義済みの値を有し、定数と呼ばれます。SenseTalkでは、次の7つ(empty、return、true、false、up、downおよびend)の真の定数が存在します。これらに加えて、多数の事前定義済みの変数が存在します。これらは事前定義済みの値を持つものの、変数としても使用できる(そしてスクリプト内で値を変更できる)単語です。詳細は、SenseTalkにおける制限ワードを参照してください。
以下に、SenseTalkで事前定義済みの値を持つ単語の一部を示します。
単語 |
事前定義済みの値 |
empty |
空の文字列。テキストリテラル""と同じです。 |
return |
「ニューライン」文字。キーボード上で「Return」キーを押すと複数行のフィールドに入力される文字と同じです。 |
carriageReturn |
「キャリッジリターン」文字。numToChar(13)と同じです。 |
linefeed |
ラインフィード文字。returnまたはnumToChar(10)と同じです。 |
crlf |
ラインフィードが後に続くキャリッジリターン。numToChar(13)およびnumToChar(10)と同じです。 |
lineSeparator |
numToChar(0x2028)に等しいUnicodeの行区切り文字。 |
paragraphSeparator |
numToChar(0x2029)に等しいUnicodeの段落区切り文字。 |
quote |
直線状の二重引用符(")。 |
tab |
タブ文字。「タブ」キーを押すとフィールドに入力される文字と同じです。numToChar(9)と同じです。 |
space |
単一のスペース文字(「 」)。 |
comma |
コンマ(「,」)。 |
slash |
前向きのスラッシュ(「/」)。 |
backslash |
後ろ向きのスラッシュ(「\」)。 |
colon |
コロン(「:」)。 |
formfeed |
フォームフィード文字。numToChar(12)同じです。 |
nullChar |
null文字。numToChar(0)と同じです。 |
nil null |
欠損値(例えば、SenseTalkにおいてデータベースでnull値を表すのに使用される値)に相当。 |
pi |
円に関連する計算に使用する算術値π。SenseTalkでは、piは値 3.14159265358979323846を保持します。 |
LightSpeed | 光の速さで、299,792,458 メートル毎秒に等しい。 |
googol | 10の100乗に等しい。 |
true |
単語「true」。SenseTalkにおいて論理値TRUEの意味を持ちます。 |
false |
単語「false」。SenseTalkにおいて論理値FALSEの意味を持ちます。 |
yes |
単語「Yes」。SenseTalkにおいて論理値TRUEの意味を持ちます。 |
no |
単語「No」。SenseTalkにおいて論理値FALSEの意味を持ちます。 |
on |
単語「On」。SenseTalkにおいて論理値TRUEの意味を持ちます。 |
off |
単語「Off」。SenseTalkにおいて論理値FALSEの意味を持ちます。 |
up |
単語「up」。 |
down |
単語「down」。 |
end |
the endValueグローバルプロパティの値で、利用できる値がなくなったときにイテレータによって返されます(デフォルト値は「ⓔ ⓝ ⓓ」)。 |
zero、one、two、 ... |
単語zero、one、two、threeなどは、対応する数値として事前に定義されています(上記の「数値」を参照)。 |
today |
国際的な日付フォーマットで示される現在の日付。 |
now |
国際的な短縮形の時間フォーマットで示される現在の時間。 |
date |
date関数と同じフォーマットで示される現在の日付。 |
time |
time関数と同じフォーマットで示される現在の時間。 |
上記に示した単語empty、return、true、false、up、downおよびendは、真の定数です。その他の単語は事前定義済みの変数であり、スクリプトを用いて、その中にその他の変数を格納することができます。
事前定義済みのカスタム変数
上に記した事前定義済みの変数に加えて、SenseTalkは必要に応じてカスタマイズできる、その他の変数の定義を起動時に自動的にロードします。これらの定義は、SenseTalkEngineフレームワーク内のリソースフォルダに存在する「.predef」拡張子付きのファイルか、ホストアプリケーションにロードされるその他のバンドルに組み込まれます。
この拡張子付きの任意のファイルは、アーカイブ済みのプロパティリストを含むプレーンなテキストファイルである必要があります。SenseTalkのvalue()関数を使用して各プロパティリストを読み取り、そのキーと値を事前定義済みの変数としてSenseTalkエンジンを用いて登録できます。
2つのリソースが同じ事前定義済み変数名に値を提供する場合は、ロードされる最後の値がその変数に用いられる値となります。ロードされる値はSenseTalk式であるため、式を組み込むことで、既に定義済みの値をチェックして代わりに使用したり、新しい値に組み入れることができます。
提供される事前定義済みの変数
SenseTalkには複数の事前定義済み変数の組がインストールされており、役に立つ多くの文字や記号に対して、便利な名前が提供されます。これらすべての記号があらゆるフォントで利用できるわけではありませんが、すべての記号が便利な標準Unicode文字で提供されます。例:
put copyrightSign && "2008"-- © 2008
提供される記号には、以下のものが含まれます。
period(.)、fullStop(.)、semicolon(;)、questionMark(?)、exclamationMark(!)、numberSign(#)、ellipsis(…)、circumflexAccent(^)、ampersand(&)、asterisk(*)、leftParenthesis(()、rightParenthesis())、leftSquareBracket([)、rightSquareBracket(])、leftCurlyBracket({)、rightCurlyBracket(})、underscore(_)、apostrophe(')、singleQuote(')、tilde(~)、graveAccent(`)、hyphen(‐)、nonBreakingHyphen(-)、figureDash(‒)、enDash(–)、emDash(—)、dagger(†)、doubleDagger(‡)、bullet(•)、triangularBullet(‣)、nonBreakingSpace( )、atSign(@)、careOfSign(℅)、serviceMarkSign(℠)、telephoneSign(℡)、tradeMarkSign(™)、facsimileSign(℻)、numeroSign(№)、invertedExclamationMark(¡)、invertedQuestionMark(¿)、verticalBar(|)、brokenBar(¦)、sectionSign(§)、copyrightSign(©)、registeredSign(®)、pilcrowSignまたはparagraphSign(¶)、middleDot(·)、cedilla(¸)、leftDoubleAngleQuotationMark(«)、rightDoubleAngleQuotationMark(»)、checkMark(✓)、blackDiamond(◆)、lowerLeftPencil()、helmSymbol(⎈)、caretSign(‸)、referenceMark(※)、doubleExclamationMark(‼)、doubleQuestionMark(⁇)、heavyCheckMark(✓)、xMark(✗)、heavyXMark(✗)
通貨記号
centSign(¢)、poundSign(£)、currencySign(¤)、yenSign(¥)、euroSign(€)、dollarSign($)
数値および数学記号
lessThanSign(<)、greaterThanSign(>)、equalsSign(=)、percentSign(%)、perMilleSign(‰)、perTenThousandSign(‱)、degreeSign(°)、superscriptOne(¹)、superscriptTwo(²)、superscriptThree(³)、microSign(µ)、plusSign(+)、minusSign(−)、multiplicationSign(×)、divisionSign(÷)、plusOrMinusSign(±)、minusOrPlusSign(∓)、squareRootSign(√)、cubeRootSign(∛)、infinitySign(∞)、notSign(¬)、equalSign(=)、almostEqualSign(≈)、approximatelyEqualSign(≅)、notEqualSign(≠)、lessThanOrEqualSign(≤)、greaterThanOrEqualSign(≥)、fractionOneQuarter(¼)、fractionOneHalf(½)、fractionThreeQuarters(¾)
キーボード記号
commandKeySymbol(⌘)、optionKeySymbol(⌥)、controlKeySymbol(⌃)、shiftKeySymbol(⇧)、eraseRightKeySymbol(⌦)、eraseLeftKeySymbol(⌫)、escapeKeySymbol(⎋)、returnKeySymbol(⏎)、ejectKeySymbol(⏏)、appleLogo()、alternativeKeySymbol(⎇)、blankKeySymbol(␣)、capsLockKeySymbol(⇪)、clearKeySymbol(⌧)、pageUpKeySymbol(⇞)、pageDownKeySymbol(⇟)、tabKeySymbol (⇥)、tabLeftKeySymbol(⇤)、returnLeftKeySymbol(↩)、returnRightKeySymbol(↪)、leftArrowSymbol(←)、rightArrowSymbol(→)、upArrowSymbol(↑)、downArrowSymbol(↓)、contextualMenuKeySymbol()
その他の記号
whiteDiamond(◇)、fisheye(◉)、blackCircle(●)、whiteCircle(○)、largeCircle(◯)、dottedCircle(◌)、bullseye(◎)、whiteBullet(◦)、blackSun(☀)、whiteSun(☼)、cloud(☁)、umbrella(☂)、umbrellaWithRainDrops(☔)、snowman(☃)、cometSymbol(☄)、blackStar(★)、whiteStar(☆)、lightningSymbol(☇)、thunderstormSymbol(☈)、sunSymbol(☉)、blackTelephone(☎)、whiteTelephone(☏)、hotBeverage(☕)、shamrock(☘)、skullAndCrossbones(☠)、cautionSign(☡)、radioactiveSign(☢)、biohazardSign(☣)、caduceus(☤)、ankh(☥)、peaceSymbol(☮)、yinYang(☯)、firstQuarterMoon(☽)、lastQuarterMoon(☾)、femaleSign(♀)、maleSign(♂)、snowflake(❄)、hotSprings(♨)、whiteFlag(⚐)、blackFlag(⚑)、heavyBlackHeart(❤)、blackSpadeSuit(♠)、blackHeartSuit(♥)、blackDiamondSuit(♦)、blackClubSuit(♣)、whiteSpadeSuit(♤)、whiteHeartSuit(♡)、whiteDiamondSuit(♢)、whiteClubSuit(♧)、recyclingSymbol(♲)、blackRecyclingSymbol(♻)、whiteSmilingFace(☺)、blackSmilingFace(☻)、whiteFrowningFace(☹)
the predefinedVariablesグローバルプロパティ
the PredefinedVariablesグローバルプロパティは、すべての事前定義済み変数の定義を含むプロパティリストです。本グローバルプロパティの使用に関する詳細情報は、the predefinedVariablesを参照してください。
リスト
SenseTalkは、丸括弧で囲まれコンマで区切られる値のリストを認識します。
(1,2,3)
("a","b","c")
リストには、その他のリストなどのあらゆる種類の値を組み込むことができます。
(12.4,"green", <<John said "Hello!">>, (44,6), (55,2) )
リスト内のアイテムは、その位置番号によってアクセスできます。最初のアイテムが1番となります。
item 1 of ("red", "green", "blue") -- "red"
the third item of ("c","d","e","f","g") -- "e"
リストは、値を組織化するのに非常に役立ちます。SenseTalkでは、リストを作成して操作するための多くのコマンドや演算子を利用できます(リストとプロパティリストを参照)。
プロパティリスト
プロパティリストはリストと類似していますが、順序付けられた値のリストが組み込まれる代わりに、各値が名前によって特定されます。
(size:12, color:blue)
(name:"Jason", age:"67", phone:"555-1234", city:"Denver")
プロパティリスト内のプロパティは、名前によってアクセスできます。
property "width" of (shape:"oval",height:"12",width:16) -- 16
プロパティリストは、実際はシンプルな形式のオブジェクトです。シンプルなデータコンテナとみなされるプロパティリストについて説明します(リストとプロパティリストを参照)。オブジェクトの詳細は、オブジェクトで説明します。
範囲
範囲には、数、日付、時間または文字の範囲を特定する開始値と終了値を使用します。
1..200
"May 1" to "June 30"
"A" .. "Z"
範囲は昇順または降順とすることができ、刻み値を指定することもできます。
500 to 200 down by 10
start to finish by step
範囲の値は、範囲として直接使用するか、値のリストを生成するのに使用できます。または、リストそのもののようにアクセスすることも可能です。
put item 12 of "May 1" to "June 30" -- "May 12"
範囲とその使用法の詳細は、範囲、イテレータおよびEach式で説明します。
特別な値
時間間隔
ある状況では、時間間隔を使用することが役に立つ場合があります。SenseTalkは、秒(少数を含む)で測定された時間間隔を処理しますが、用語(weeks、days、hours、minutes、seconds、ticks(60分の1秒)、milliseconds(1000分の1秒)、およびmicroseconds (100万分の1秒))を使用して時間間隔を自然に表すことも可能です。また、hrs、mins、secsなどの一般的な短縮形も使用できます。
wait 2 minutes 12.6 seconds
if the time - startTime < 150 milliseconds then logSuccess
put the date plus one week into nextWeek
put 1 into mtimeout -- 分数
put 15 into stimeout-- 秒数
wait mtimeout minutes and stimeout seconds
バイトサイズ
データファイルとデータブロックは通常バイトで測定され、かなり大きな数になることがよくあります。このようなデータサイズの操作を簡略化するために、SenseTalkでは以下に例を示すように、用語(bytes、kilobytes(またはKB)、megabytes(またはMB)、gigabytes(またはGB)、またはterabytes(またはTB))を使用してこれらを自然に表すことができます。
if the diskspace is less than 5 megabytes then put "5 MB warning"
if the size of file logFile > 256 KB then trimLogFile
put (the size of file movie) / 1 MB into movieSizeInMegabytes
バイナリデータ
低レベルの音や画像を操作するような一部のアプリケーションでは、バイナリデータを直接処理する必要がある場合があります。任意のサイズのバイナリデータを作成したり、比較する必要がある状況において、SenseTalkはバイナリデータリテラルを提供します。データリテラルは、山括弧< >で囲まれた任意の偶数の16進数として記述されます。データリテラル内のスペースや新たな行は無視されます。
put <AF326B47 0058D91C> into value64