単位付き数字の使用
SenseTalkでは、多くの種類の操作と比較のために、数字を数字またはテキストとして使用できます。数字は、抽象的な値ではなく、特定の種類の数量をよく表します。例えば、長方形の面積は「9平方インチ」と参照されたり、口座残高は$698.53を含んでいることがあります。
SenseTalkは、インチやドルなどの単位タイプ を数字と関連付けることで、意味と関連性を加えます。変数への代入とそれらの値を使用した計算は、必要に応じて単位を維持および変換します。
単位の取り扱い
単位タイプ付きの数値を指定するには、値の後に単位名を含めます。(この規則の例外は、以下に説明するドル記号 — $ — です。)SenseTalkは、単数形、複数形、略語の単位名、および面積と体積の「平方」と「立方」修飾子を認識します:
put 3 ft -- プリント:"3 feet"
set weight to four grams
put 9 sq in -- プリント:"9 square inches"
注:単位の省略形にはピリオドを含めません。
同じタイプの値のチェーンを使用できます。1つの値の後に別の値を置いたり、and
で値を結合したりします。このような表現は、体重や距離の測定に一般的に使用されます:
put 6 ft 3 in -- プリント:"6.25 feet"
set weight to 2 pounds and 3 ounces
put weight -- プリント:"2.1875 pounds"
上記の例から見ると、あなたは表現の中で単位を混在させることができます。単位は、代入と計算で必要に応じて保持または変換されます:
put 3 ft into width
add 1 yard to width-- 1 yardは自動的に3 ftに変換され、既存の幅に加えることができます
put width -- プリント:"6 feet"
put width * 4 feet into area
put area -- プリント:"24 square feet"
add 2 liters to area -- ミスマッチした単位の例外をスローします
速度(距離/時間)や体積(長さx幅x深さ)などの複雑な単位タイプを形成するために単位を組み合わせることができます:
set speed to 25 mi/hr
put speed -- プリント:"25 miles per hour"
put 3 hrs 45 min * speed -- プリント:"93.75 miles"
set accelerationOfGravity to 32 ft/s^2
set flow to 5 gallons per minute
set clickRate to 500/hr
set price to $5.96 per lb -- same as: 5.96 dollars per pound
set weight to 4 oz
put price * weight -- プリント:"$1.49"
単位の互換性についての注意
SenseTalkは、それが意味をなす場合(3フィートと1ヤードを組み合わせて6フィートを得るなど)に単位を変換して値を組み合わせます。ただし、論理的に組み合わせることができない単位(フラットな面積測定と体積測定など)を組み合わせようとすると、エラーが発生します。
単位は互換性がある(同じ種類の測定を表す)必要があります。つまり、長さの単位(例えば)は、他の長さの単位に加えることができます。具体的な単位のタイプが異なっても(メートル+フィート+インチ=OK!)これらのタイプは互換性があると言われています。
ただし、互換性のない単位との加算、減算、または比較を試みると例外がスローされます:
put average(4 in, 5 ft, 1 meter) --> 0.8752 meters
put average(4 in, 5 ft, 1 pint) -- throws an exception because of differing unit types
単位の変換
上記の通り、SenseTalkは自動的に値を一つの単位タイプから別の単位タイプに変換します。この能力は数学的な操作に特に便利です。また、明示的に単位を一つのタイプから別のタイプに変換することも可能です。
加算、減算
SenseTalkは加算や減算の操作、そして二つの値の等価性を比較するために値を互換性のある単位に自動的に変換します。加算や減算の場合、結果の値はシステム内の単位の内部順序に基づいて一つの単位タイプを別の単位タイプよりも優先します。
例えば、インチとセンチメートルを加えると、操作数の順序に関係なく結果はセンチメートルで出力されます。メートルとセンチメートルを加えると、結果はメートルです。ただし、as
演算子を使って 結果タイプを指定することも可能です:
put 8 inches + 3 cm -- 8 inches をセンチメートルに変換し、それに3センチメートルを加える
-- なので出力:"23.32センチメートル"
put (8 inches + 3 cm) as inches -- 上記と同じだが、出力前にインチに変換する
-- なので出力:"9.181102インチ"
単位タイプを持つ数とプレーンな数(つまり、単位タイプのない数)の加算または減算はエラーとなります。
#multiply-divide
単位を使って乗算や除算をすると、単位が保持されるか変換されるかは少し複雑です。プレーンな数を使って単位付きの数を乗算または除算すると、結果は単位タイプを保持します:
set height to 20 feet
set width to 3 times height
put width --> 60 feet
set var1 to 2
put 10 hours / var1 --> 5 hours
両方の数に単位が含まれている場合の除算では、互換性のある単位タイプの値は加算と同じく同じ単位に変換されます。ただし、結果からは単位が削除されます:
Put 4 yards divided by 2 feet -- Prints: "6" (4 yards can be divided into6つの2フィートのセグメントに分けることができます)
単位付きの数が乗算されると、互換性があるかどうかに関わらず、単位が保持され、複合単位タイプが形成されます。例えば、マイルを時間で除算すると、両方の単位が保持され、複合単位タイプのマイル毎時の値が得られます:
put 500 miles divided by 4 hours --> 125 miles per hour
put 4 yard * 2 feet --> 24 square feet
put 2 liters times 2 liters --> 4 liters^2
数学的な演算子を使って単位のリストを使用することができます。乗算と除算では、リストに対して単一のプレーンな数を使用することができます。加算、減算、乗算、除算では、リストの数が一致していれば、単位付きの数の複数のリストを使用することができます:
put [4 oz, 2 g, 0.3 m] / 3 --> [1.333333 ounces,0.666667 grams,0.1 meters]
put [4 oz, 2 g, 0.3 m] + [4 oz, 2 g, 0.3 m] --> [8 ounces,4 grams,0.6 meters]
put [4 oz, 2 g, 0.3 m] - [4 oz, 2 g, 0.3 m] --> [0 ounces,0 grams,0 meters]
put [4 oz, 2 g, 0.3 m] * [4 oz, 2 g, 0.3 m] --> [16 ounces^2,4 grams^2,0.09 square meters]
put [4 oz, 2 g, 0.3 m] / [4 oz, 2 g, 0.3 m] --> [1,1,1]
範囲
範囲を指定するときに単位を使用することができます。範囲の一方の端だけに単位が指定されている場合、他方の端は同じ単位タイプとみなされます:
put 3..7 m/s --> 3 meters per second to 7 meters per second
同様に、between
演算子は、2番目の値に単位が指定されている場合、単位が一致するものとして扱われます。
put 4 cm is between 1 and 3 inches --> True
Asによる変換
as
演算子を使って、値を特定の単位に変換することができます:
put 5 feet as inches --> 60 inches
put 27 grams as oz --> 0.952397 ounces
put totalWeight as kilograms
set distance to (var1 + var2) as yards
上記の最後の例では、最終結果がヤードで表されることを保証するために、"var1 + var2"を括弧で囲む必要があります。括弧がない場合(つまり、"var1 + var2 as yards")、as
演算子は+
演算子よりも高い優先順位を持つため、var2の値はvar1の値に加える前にヤードに変換されます。そのため、結果の単位はヤードか、var1の単位によっては他の何かになる可能性があります。
Convertコマン ド
convert
コマンドを使うと、変数の値を特定の単位に変換することができます。変換される元の値が変数または他のコンテナでない場合、結果の値は変数it
に格納されます。
convert depth to fathoms -- depthの値は今、fathomsになります
convert 3.5 gallons to cc -- 結果はitに格納されます
注意:Convertコマンドは、SenseTalkの日付と時間の値で説明されているように、日付と時間の形式を変換するためにも使用することができます。
Unitsプロパティ
widthのunits
プロパティは、width.units
やthe units of width
とも呼ぶすることも可能です。直接unitsプロパティを変更すると値の変換は行われないので、この方法を慎重に使用することを覚えておいてください。
set width to 6 ft
put width's units --> feet
put width --> 6 feet
convert width to yards
put width's units --> yards
put width --> 2 yards
set width's units to "feet"-- これは値の単位を直接設定し、以前の単位を置き換えます
put width's units --> feet
put width --> 2 feet
変数のunits
プロパティに直接アクセスしたり、変更したりすることができます。ただし、この方法では値を変換しないことに注意してください:
単位を持たない素の数値に対して単位を設定したい場合もあります。例えば、ハンドラは、パラメータが明示的に他の単位で与えられていない場合、それがメートルを表すと仮定するかもしれません:
put areaOfCircle(6 in) --> 113.097336 square inches
put areaOfCircle(4) --> 50.265482 square meters
function areaOfCircle radius
if radius.units is empty then set units of radius to "meters"
return pi * radius squared
end areaOfCircle
単位の種類
SenseTalkは時間間隔(日数、分数などの期間)、長さや距離(マイル、フィート、メートルなど)、質量または重さ(グラム、オンスなど)、液体の量(リットル、ガロンなど)、回転や角度(度、ラジアンなど)、電気的な量(アンペア、ボルトなど)、その他多数の単位をサポートしています。
is a
演算子を使って、値が特定のタイプであるかどうかをテストすることができます:
if mySize is not a length then put "size must be a length"
if amount is a weight then set calculateByWeight to true
通貨
通貨の額は、通常の金額表記法であるドル記号($)を前置することでドルで指定することができます。通貨はまた、他の単位タイプと同様に、数字の後にドルやセントなどの単位名を使用して指定することもできます:
set cost to 5 dollars and 27 cents
set cost to $5.27