演算子は一般的な数値演算、値の比較、リストの作成、データ要素の添え字の指定、メッセージの送信、リストの連結、名前の適用範囲の指定、式の終了などの機能を持つ、1文字または2文字の記号です。
演算子にはさまざまな種類があります。
• 二項演算子(3 + 4の+、a = 7の=のように、両側にオペランドをとるもの)
• 接頭演算子(論理否定の!aのように、右側にオペランドを1つとるもの)
• 接尾演算子(aをインクリメントするa++のように左側にオペランドを1つとるもの)
式を書きやすくするために、JSLでは関数の代わりの方法として、いくつかの特別な文字演算子が使用できます。これらの演算子は、関数として記述した場合と同じ意味を持ちます。たとえば、次の2つのステートメントは等価です。
Net Income After Taxes = Net Income - Taxes;
Assign( Net Income After Taxes, Subtract( Net Income, Taxes ) );
割り当て演算を書くときは、Assign()関数か、二項演算子の=を使います。同様に、引き算を行うには、Subtract()関数またはマイナス記号を使います。どちらも、JMP内部では同じものとして扱われます。
通常、JSLでは空白が無視されるので、“netincomeaftertaxes”と“net income after taxes”は同じものとみなされます。ただし、2文字の演算子の文字間にスペースを入れてはなりません。次の演算子は、必ずスペースなしで入力してください。 ||、|/、<=、>=、!=、==、+=、-=、*=、/=、++、--、<<、::、:*、:/、/*、*/ |
他に、一般的な演算子としてセミコロン( ; )があります。セミコロンは次のような目的で使用します。
• プログラミングシーケンスで、複数の式を区切り、同時につなげる。セミコロンは最後の式の結果を戻します。つまり、a;bはGlue(a,b)と等価です。
• 式の最後。セミコロンを式の最後に付けることはできますが、他の言語のようにステートメントの終わりを表すものとして機能するわけではありません。
式には複数の演算子を含めることができます。その場合、演算子は優先度順にグループ化されていきます。たとえば、*は+より優先されます。
a + b * c
まずb * cの掛け算が行われた後、その結果がaに加算されます。
+は-より優先されます。
a + b * c - d
まずb * cの掛け算が行われた後、その結果がaに加算されます。a + b * cの結果からdが引かれます。
表5.3は、演算子と、対応する関数をまとめたものです。演算子は優先順位の高い順にリストしてあります。
演算子 |
関数構文 |
説明 |
|
---|---|---|---|
{ } |
リスト |
{a,b} List(a,b) |
リストを作成する。 |
[ ] |
添え字 |
a[b,c] Subscript(a,b,c) |
データ要素aの中にある特定の要素を指定する。aは、リスト、行列、データ列、プラットフォームのオブジェクト、ディスプレイボックスのどれでもかまいません。 |
++ |
Post Increment |
a++ Post Increment(a) |
aに1を加えた値をaに格納する。 JMPには、プリインクリメント演算子がありません。代わりに、Add To()演算子(+=)を使用します。 |
– – |
Post Decrement |
a–– Post Decrement(a) |
aから1を引いた値をaに格納する。 JMPには、プリデクリメント演算子がありません。代わりに、Subtract To()演算子(-=)を使用します。 |
^ |
検出力 |
a^b Power(a,b) Power(x) |
aをb乗する。引数を1つだけ指定したときは、2乗と解釈されます。たとえば、Power(x)と指定した場合は、x2が計算されます。 |
– |
マイナス記号 |
–a Minus(a) |
aの符号を反転する。 |
! |
Not |
!a Not(a) |
論理否定。0(偽)を0でない値(または真)にする。1(真)を0の値(偽)にする。 |
* |
掛け算 |
a*b Multiply(a,b) |
aにbを掛ける。 |
:* |
EMult |
a:*b EMult(a,b) |
行列aとbを要素ごとに掛ける。(行列aの各要素に行列bの各要素を掛ける。) |
/ |
割り算 |
a/b Divide(a,b) Divide(x) |
Divide(a, b)はaをbで割る。 Divide(x)と指定した場合には、分母がx、分子が1と解釈され、1/xが求まります。 |
:/ |
EDiv |
a:/b EDiv(a,b) |
行列aをbで要素ごとに割る。(行列aの各要素を行列bの各要素で割る。) |
+ |
追加 |
a+b Add(a,b) |
aとbを足す。 |
– |
引き算 |
a–b Subtract(a,b) |
aからbを引く。 |
|| |
Concat |
a||b Concat(a,b) |
2つ以上の文字列または2つ以上のリストを接合する。行列を横方向に連結する。リストの連結または『スクリプト構文リファレンス』を参照してください。 |
|/ |
VConcat |
matrix1|/matrix2 VConcat(matrix1, matrix2) |
行列を縦方向に連結する。(行列を横方向に連結する場合は||またはConcatを使用。) |
:: |
指数 |
a::b Index(a,b) |
a~bの整数の要素を持つ行列を作成する。 (コロンは、有効範囲を指定する演算子としても使われます。その場合、:aはデータテーブル列aを、::aはJSLのグローバル変数aを意味します。スコープ演算子を参照してください。) |
<< |
Send |
object << message Send(object, message) |
オブジェクト(object)にメッセージ(message)を送る。 |
== |
単純 |
a==b Equal(a,b)... |
比較のためのブール値。これらはすべて、真のときは1、偽のときは0を戻します。aまたはbに欠測値があると、欠測値が戻され、真も偽も評価されません。欠測値の扱いについては、欠測値を参照。 |
!= |
Not Equal |
a!=b Not Equal(a,b)... |
|
< |
Less |
a<b Less(a,b)... |
|
<= |
Less or Equal |
a<=b Less or Equal(a,b) |
|
> |
Greater |
a>b Greater(a,b) |
|
>= |
Greater or Equal |
a>=b Greater or Equal(a,b) |
|
<=、 < |
Less Equal Less |
a<=b<c Less Equal Less(a,b,c) |
範囲チェック。真のときは1、偽のときは0を戻します。aかbのどちらかが欠測値のときは、欠測値になります。 |
<、<= |
Less Less Equal |
a<b<=c Less Less Equal(a,b,c) |
|
& |
And |
a&b And(a,b) |
論理積。両方が真のとき、真を戻します。左の値が偽の場合、右の値は評価されません。欠測値の扱いについては、欠測値を参照。 |
| |
Or |
a|b Or(a,b) |
論理和。どちらかまたは両方が真のとき、真を戻します。欠測値の扱いについては、欠測値を参照。 |
= |
Assign |
a=b Assign(a,b) |
bの値をaに代入する。aの現在の値が置き換わります。 |
+= |
Add To |
a+=b AddTo(a,b) |
bにaを足し、結果をaに代入する。 |
-= |
Subtract To |
a–=b SubtractTo(a,b) |
aからbを引き、結果をaに代入する。 |
*= |
Multiply To |
a*=b MultiplyTo(a,b) |
aにbを掛け、結果をaに代入する。 |
/= |
Divide To |
a/=b DivideTo(a,b) |
aをbで割って、結果をaに代入する。 |
; |
Glue |
a;b Glue(expr, expr, ...) |
a、bの順に実行する。 |