機器について知る


As you embark on the journey of writing SenseTalk, there are a few basics you'll need to be familiar with. Here we cover some of the fundamental equipment you'll need, from text and lists to loops and conditionals.
テキストの操作
SenseTalk のテキスト処理機能は広範囲かつ非常に強力であると同時に、非常に読みやすく人間志向です。
テキスト演算子には次のものがあります。
- 2つの文字列を結合(連結)するための
& - 2つの文字列をスペースで結合する
&& contains、is inは、ある文字列に別の文字列が含まれているかどうかを判定します。- 文字列が別の文字列で始まっているか終わっているかを判断するための
begins with、ends with - 文字列が指定されたパターンに一致するかどうかを判定する
matches
チャンク表現
SenseTalkのチャンク式を使うと、自然な方法でテキストを操作できます。チャンク式は、文字、単語、項目(デフォルトではカンマ区切り)、またはテキスト行を直接識別し、文字列の一部にアクセスしたり、変更したりすることができます。
put characters 3 to 9 of acctNum into branchNum
put the first 3 chars of word 2 of "library catalog" --> "cat"
コンテナのチャンクもコンテナであるため、変数や他のコンテナを操作する任意のコマンドによって変更できます。
set text to "my flower are beautiful"
put "s" after word 2 of text
put text --> "my flowers are beautiful"
add 1 to the last item of line 7 of file "counters.txt"
パターン
SenseTalk のパターン言語 は、正規表現のすべての機能を読みやすい形式で提供します。
set sentence to "Please use addresses of the form 42.212.86.x"
put every occurrence of <1 to 3 digits, then "."> in sentence --> ["42.","212.","86."]
リストの操作
リストは、()、[ ]、または{}を使用して、項目をカンマで区切ってスクリプト内で直接作成できます(ただし、一貫性を保つために角括弧を使用することを強くお勧めします)。
[]— 空のリスト[1,3,5]— 3つの数字のリスト("dog", "cat", [x,y])— 2つの文字列とネストされたサブリストを含むリスト
テキスト チャンクと同じ構文を使用して、リスト内の個々の項目またはサブリストにアクセスします。
put item 4 of [a,b,c,d,e,f] --> d
put the last 3 items of of [a,b,c,d,e,f] --> [d,e,f]
さらに、SenseTalk は ranges をサポートしており、リストとして扱われるときに必要に応じて値を生成します。
set scoreRange to 101..1000
put item 4 of scoreRange --> 104
put the last 3 items of scoreRange --> [998,999,1000]
リストコマンドには次のものが含まれます。
each式は選択した項目を抽出または操作します (Each Expressions を参照)- アイテムを追加または挿入するには
insertを使用します (このためにputを使用しないでください。挿入コマンドを参照してください) - リストをスタックとして扱うための
pushとpop(Push コマンド と Pop コマンド を参照) - リストをキューとして扱うための
pushとpull(Pull コマンド を参照) - リストの順序をランダム化するには
shuffledを使用します (Shuffle コマンド を参照) sortedは、リストを特定の順序でソートします (Sort コマンド を参照)
リスト演算子には次のものがあります:
- 2つのリストを連結するための
&&& - リストに値またはサブリストが含まれているかどうかをテストするための
containsまたはis in - 重複する値を除いたリストを取得するには「unique items」を使用します
- 2つのリストの両方に存在する値のリストを取得するには、
intersectionを使用します。 - 2つのリストのいずれかに存在する値のリストを取得するには
unionを使用します excludeは別のリストにあるものを除いた値のリストを取得します
重要なグローバルプロパティ
ランタイム環境の様々な側面を制御するグローバルプロパティは数多くあります。例えば、
numberFormat— 表示される数値の形式(小数点以下の桁数を含む)を制御します。the defaultStringEncoding— テキストファイルの読み書き時に使用するエンコーディングを制御しますassertionBehavior— 失敗したアサーションが例外をスローするか、警告をログに記録するか、エラーをログに記録するか、スクリプトの実行を一時停止するかを制御します。itemDelimiter— テキスト項目間の区切り文字として使用される文字を指定します
すべてのグローバルプロパティは先頭に「the」を付ける必要があります。また、スクリプト実行中にいつでも変更できます。ほとんどのプロパティは、再度変更されるまでスクリプトの動作に影響を与えますが、一部のプロパティは「ローカル」プロパティとみなされ、現在のハンドラの終了時にデフォルト値に戻ります。
詳細については、ローカル プロパティとグローバル プロパティ を参照してください。
サバイバルのヒント: "The" は必ずしもオプションではない
of を使用してオブジェクトまたはプロパティ リストのプロパティにアクセスしたり、関数を呼び出したりする場合、the という単語はオプションです。
put the length of "time" --> 4
put length of "time" --> 4
パラメータなしで関数を呼び出す場合、() が使用されていない場合は the が必要です。
put parameterList() --> displays the parameters
put the parameterList --> displays the parameters
put parameterList --> displays the variable "parameterList"
グローバル プロパティにアクセスする場合は、the が必要です。
put the itemDelimiter --> displays the global property
put itemDelimiter --> here "itemDelimiter" is a variable
繰り返しループ
SenseTalk のすべてのループは、repeat という単語で始まる行で始まり、end repeat という行で終わります。repeat ループには多くの種類があり、for ループ(repeat for)、while ループ(repeat while、repeat until)、コレクション内の各値で繰り返すループ(repeat with)など、他の言語の従来のループに対応するものもあります。また、一定時間繰り返したり、特定の時刻まで繰り返したり、条件が満たされている間少なくとも1回繰り返したりするなど、他の言語ではあまり見られない種類の repeat ループもあります。Repeat Loops を参照してください。
一連の値を繰り返し処理するrepeatループにおいて、repeat変数が指定されていない場合、反復処理中の値は変数ITに代入されます。exit repeatコマンドとnext repeatコマンドは、C言語などのbreak文やcontinue文に似ています。現在の反復回数は、どのタイプのループでもcounter(the repeatIndexとも呼ばれます)として参照できます。
条件文
条件文は、 if 、 then 、およびオプションで else を使用して 1 行に記述できます。
if total < 100 then add 1 to total
条件ブロックは、 if、 then、およびオプションで else を使用して記述されます。各条件ブロックは別々の行に記述され、その間にコード ブロックが置かれ、 end if で終了します。
if balanceDue is greater than creditLimit then
add 1 to creditViolations
set message to “Overdue!”
else
set message to “Your account is up to date”
end if
マルチケース if ステートメントは、他の言語の switch/case ステートメントの機能を、明確で読みやすい方法で提供します。
if age …
… is less than 4 then set category to “toddler”
… is between 4 and 17 then set category to “youth”
… is at least 18 then set category to “adult”
end if
詳細については、条件文を参照してください。