演算子にはいくつかのタイプがあります。
- 単項演算
- 単項演算は、後ろにオペランドを 1 つ付けて演算子を指定することによって
コーディングされます。 単項演算子には次のものがあります。
- +
- 単項のプラス演算は、数値オペランドの値を維持します。
- -
- 単項のマイナス演算は、数値オペランドの値を否定します。たとえば、NUMBER に値 123.4 がある
場合、-NUMBER の値は -123.4 となります。
- NOT
- 論理否定演算は、標識オペランドの値が '0' である場合は '1' を
戻し、標識オペランドが '1' である場合は '0' を戻します。 比較演算、あるいは演算 AND または OR の結果は、
タイプ標識の値であることを覚えておいてください。
- 2 項演算
- 2 項演算は、2 つのオペランド間に演算子を指定することによって
コーディングされます。 2 項演算子には次のものがあります。
- +
- この演算の意味は、オペランドのタイプによって異なります。これは次の場合に使用することができます。
- 2 つの数値の加算
- 日付、時刻、またはタイム・スタンプへの期間の加算
- 2 つの文字値、2 つの図形値、または 2 つの UCS-2 値の連結
- 基底ポインターへの数値オフセットの加算
- 日付と時刻を結合してタイム・スタンプを作成
- -
- この演算の意味は、オペランドのタイプによって異なります。これは次の場合に使用することができます。
- 2 つの数値の減算
- 日付、時刻、またはタイム・スタンプからの期間の減算
- 基底ポインターからの数値オフセットの減算
- 2 つのポインターの減算
- *
- 乗算演算は 2 つの数値を乗算するために使用されます。
- /
- 除算演算は、2 つの数値を除算するために使用されます。
- **
- 指数演算は、ある数を別の数のべき乗にする場合に使用されます。 たとえば、2**3 の値は 8 です。
- =
- 等号演算は、2 つのオペランドが等しい場合には '1' を戻し、そうでない
場合は、'0' を戻します。
- <>
- 非等号演算は、2 つのオペランドが等しい場合は '0' を戻し、そうでない
場合は '1' を戻します。
- >
- より大演算は、第 1 オペランドが第 2 オペランドより
大きい場合には '1' を戻します。
- >=
- より大または等号演算は第 1 オペランドが第 2 オペランドと
等しいか、それより大きい場合には '1' を戻します。
- <
- より小演算は、第 1 オペランドが第 2 オペランドより小さい
場合には '1' を戻します。
- <=
- より小または等号演算は、第 1 オペランドが第 2 オペランド
と等しいか、それより小さい場合には '1' を戻します。
- AND
- 論理 AND 演算は、両方のオペランドに標識 '1' がある場合には '1' を
戻します。
- OR
- 論理 OR 演算は、いずれかのオペランドに標識 '1' がある場合には '1' を
戻します。
- 代入演算
-
代入演算は、代入のターゲットを指定し、その後に代入演算子を指定し、
さらにそのターゲットに代入する式を指定することによってコーディングされます。
op= 形式 (例えば +=) の複合代入演算子では、別の演算のオペランドの 1 つとしてそのターゲットを使用し、その演算に代入を結合します。
= 代入演算子は、EVAL 演算および EVALR 演算で使用されます。
op= 複合代入演算子は、EVAL 演算でのみ使用されます。 代入演算子には次のものがあります。
- = 式がターゲットに代入されます。
- += 式がターゲットに加算されます。
- -= 式がターゲットから減算されます。
- *= ターゲットが式によって乗算されます。
- /= ターゲットが式によって除算されます。
- **= ターゲットに、ターゲットを式で累乗した値が代入されます。
- 組み込み関数
- 組み込み関数については、組み込み関数で説明しています。
- ユーザー定義の関数
- 式の中で使用可能な値を戻すプロトタイプ・プロシージャー。 このプロシージャーへの呼び出しは、そのプロシージャーの戻り値と
同じタイプの値が使用される場所ならどこにでも入れることができます。 たとえば、プロシージャー MYFUNC が文字値を戻すとします。 以下は MYFUNC に対する 3 つの呼び出しを示しています。
図 1. 式でのプロトタイプ・プロシージャーの使用 *..1....+....2....+....3....+....4....+....5....+....6....+....7...+....
/FREE
if MyFunc (string1) = %trim (MyFunc (string2));
%subst(X(3))= MyFunc('abc');
endif;
/END-FREE
ユーザー定義の関数の詳細については、サブプロシージャーおよびサブルーチンを
参照してください。