メインコンテンツまでスキップ
バージョン:25.2

機器について知る

Knowing Your EquipmentKnowing Your Equipment

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つの文字列をスペースで結合する &&
  • containsis in は、ある文字列に別の文字列が含まれているかどうかを判定します。
  • 文字列が別の文字列で始まっているか終わっているかを判断するためのbegins withends 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 を使用しないでください。挿入コマンドを参照してください)
  • リストをスタックとして扱うための pushpop (Push コマンドPop コマンド を参照)
  • リストをキューとして扱うための pushpull (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 whilerepeat until)、コレクション内の各値で繰り返すループ(repeat with)など、他の言語の従来のループに対応するものもあります。また、一定時間繰り返したり、特定の時刻まで繰り返したり、条件が満たされている間少なくとも1回繰り返したりするなど、他の言語ではあまり見られない種類の repeat ループもあります。Repeat Loops を参照してください。

一連の値を繰り返し処理するrepeatループにおいて、repeat変数が指定されていない場合、反復処理中の値は変数ITに代入されます。exit repeatコマンドとnext repeatコマンドは、C言語などのbreak文やcontinue文に似ています。現在の反復回数は、どのタイプのループでもcounterthe repeatIndexとも呼ばれます)として参照できます。

条件文

条件文は、 ifthen 、およびオプションで else を使用して 1 行に記述できます。

if total < 100 then add 1 to total

条件ブロックは、 ifthen、およびオプションで 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

詳細については、条件文を参照してください。