関数

可変の値を生み出すものには、「関数」という凝った名前が付けられています。SenseTalkには、幅広い目的に対応した数々の関数があります。関数の中には、使用されるたびに異なる値を生成するもの(現在時刻を提供するthe timeなど)もあれば、 渡される「パラメータ」に応じて異なる値を生成するものもあります(同じ関数を使用しても、パラメータ値が違えば異なる結果が生成されます)。

SenseTalk言語の一部として組み込まれている関数については、本マニュアル全体を通じて(特に「コマンドと関数」のセクションで)説明しています。SenseTalkの実行されているホストアプリケーション環境によっては、これ以外の定義済み関数が提供される場合もあります。さらには、スクリプトで使用できる独自の関数を記述することも可能です。

関数の呼び出し

関数値を使用するためには、その関数を関数単独または式の一部としてスクリプトで「呼び出さ」なくてはなりません。SenseTalkで関数を呼び出す方法はいくつかあり、状況に応じて、最も自然に思えるものを使用することが可能です。一番シンプルな関数呼び出しの種類は、特定のオブジェクトに送られず、パラメータを伴わない形のものです。この種類の関数の呼び出し方法は2通りあります。1つは関数名を指定して、その後に空の括弧(パラメータがないことを示す)を付ける方法、もう1つは関数名の前に「the」を付ける方法です。

put date() -- 日付を表示します

put the date -- 日付を表示します

1つのパラメータで関数を呼び出すときは、関数名の後の括弧にパラメータを入れるか、関数名の後に「of」とパラメータを付け加えます。

put length("abcd") -- 4

put the length of "abcd" -- 4

上の2番目の例では「of」が使われているため、次のように「the」がなくても、関数の呼び出しであることをSenseTalkが認識できます。

put length of "abcd" -- 4

多くの関数は(「length」関数のように)値の何らかの属性を計算するものであるため、SenseTalkにおける関数の呼び出しにはプロパティへのアクセス表記を用いることもできます。

put "abcd" 's length -- 4

put "abcd".length -- 4

複数のパラメータで関数を呼び出すときも、方法は1つのパラメータの場合と似ています。以下はいずれも、average関数に4つのパラメータを渡しています。

put average(2,4,6,8) -- 5

put the average of 2 with (4,6,8) -- 5

put 2's average(4,6,8) -- 5

put 2 .average(4,6,8) -- 5

一部の例はこのケースでは少し不自然に見えますが、違う状況においては、この形がより自然に見える場合もあります。(上記の最後の例は、ピリオドが小数点として解釈されないように、数値である2の後ろにスペースが必要なことに注意してください。)

関数名の代わりに、括弧に入れた式を使い、呼び出す関数の名前を動的に生成することもできます。

set funcToCall to "length" -- 関数名です

put (funcToCall) of "abcd" -- 4

同じ値でいっぺんに関数のリストを呼び出すと、対応する結果のリストを得ることができます。

put (length, uppercase, lowercase) of "Test" -- (4,"TEST","test")

ここで、関数ハンドラの例を1つ挙げます。この関数ハンドラは、1つのパラメータ(aWord)を取り、その値の変更された形のコピーを返します。

function plural aWord

if aWord ends with "s" then put "es" after aWord

else if aWord ends with "y" then put "ies" into the last char of aWord

else put "s" after aWord

return aWord

end plural

以下は、この関数をスクリプトから呼び出すときの例です。

ask "What type of object are you carrying?"

put it into itemType

ask "How many do you have?"

put it into howMany

if howMany is not 1 then put the plural of itemType into itemType

answer "You have " & howMany && itemType

 

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