次の表は、EGL の演算子を優先順位の高い順にリストしたものです。 一部の演算子は、コンテキストによって複数の意味を持ちます。 EGL では、特殊文字を使用して、型の拡張 (『型拡張文字』を参照) や区切り文字 (『区切り文字』を参照) を表すことがあります。
この表には、代入演算子 (=) または複合代入演算子 (+= など) は含まれていません。 これらの特別なケースについて詳しくは、『代入』を参照してください。
| 演算子 (コンマ区切り) | 意味 |
|---|---|
| . | メンバー・アクセス演算子 (ドット) は、レコード内フィールド、ライブラリー内関数、変数内プロパティーなどのエンティティーのメンバーへのアクセスを提供します。複数レベルでの修飾が可能です。 左から右に移動するに従い、メンバーが特定されていきます。 |
| @ | @ 演算子は、名前がフィールド以外のプロパティーを参照していることを示します。 |
| new | new 演算子は、参照変数 (値ではなくアドレスを含む変数) 用に constructor 関数 (新規変数を作成する特殊関数) を呼び出します。これは、ExternalType パーツでの場合を除き、パラメーターをとらないデフォルトのコンストラクターです。『new 演算子』を参照してください。 |
| [] | 配列にアクセスする演算子 (大括弧) は、配列名からインデックス値を、または文字変数名からサブストリング値を分離します。 a[x] は配列添え字であり、b[x:y] はサブストリングです。 |
| +, - | 単項のプラス (+) やマイナス (-) は、オペランドや括弧で囲まれた式の前に付く符号であり、2 つの式の間に使用される演算子ではありません。 |
| ** | ** は、指数演算子であり、「累乗」と解釈されます。例えば、c = a**b は、a の b 乗の値が c に代入されることを示します。 第 1 オペランド (上の例では a) は、負の値にできない FLOAT です。 第 2 オペランド (上の例では b) は FLOAT リテラルまたは FLOAT 変数、正、負、0 です。 |
| *、/、&、|、xor | 乗算 (*)、整数除算 (/)、および 3 つのビット単位演算の優先順位は、等しくなっています。
整数の除算結果は、小数値になることがあります。例えば、7/5 は 1.4 になります。
ビット単位演算子 AND (&)、OR (|)、および 排他 OR (xor) は、2 つのオペランド間のビット単位演算を実行し、INT 型の値を戻します。 オペランドは、HEX(2)、HEX(4)、HEX(8)、INT、または SMALLINT のいずれかの型です。 演算は、すべての HEX または SMALLINT のオペランドを INT 型に変換して開始します。 HEX の場合、演算では長さが 4 バイトになるまでオペランドの値をゼロで左詰めで埋め込みます。 |
| % | % は、剰余演算子です。2 つのオペランドまたは数値表現の第 1 のものを第 2 のもので除算するときのモジュラスに解決されます。 例えば、7%5 は 2 になります。 |
| +, - | 加算 (+) および減算 (-) は、優先順位の等しい 2 項演算 (2 つのオペランドが必要) です。 |
| as | キャスト演算子は、第 1 オペランドの型 (第 2 オペランド) を指定します。『as 演算子』を参照してください。 |
| ::, ?:, + | EGL は 2 つの演算子 (:: および ?:) を、連結専用に使用します。 正符号 (+) もまた、連結演算子として使用されます。両者の違いについては、『連結演算子』を参照してください。 |
| ==、!=、<、>、<=、>=、isa | 論理型比較用の論理演算子は、どれも同じ優先順位です。 これらの演算子のいずれかを持つそれぞれの式を評価すると、TRUE または FALSE になります。 |
| ! | ! は、not 演算子であり、EGL が直後の論理式の値を反転したブール値 (true または false) に評価します。この演算子の後ろにくる式は、括弧で囲む必要があります。 |
| is、not、in、like、matches | 比較に用いられるこれらの論理演算子は、いずれも等しい優先順位を持ちます。これらの演算子のいずれかを含む各式は、TRUE または FALSE として評価されます。『in 演算子』、『like 演算子』、『matches 演算子』をそれぞれ参照してください。 |
| &&、and | && (and とも記述される) は、「両方が true でなければならない」ことを意味します。 and 演算子の両辺にある論理式が両方とも true の場合、その式は TRUE として解決されます。 それ以外の場合、式は FALSE として解決されます。 |
| ||、or | || (or とも記述される) は、「どちらか一方、または両方」を意味します。 or 演算子の両辺にある論理式が両方とも false の場合、その式は FALSE として解決されます。 それ以外の場合、式は TRUE として解決されます。 |
優先順位の規則に従わない場合、以下の例で示すように、予期しないエラーが発生する可能性があります。
n NUM(3) = 100 - 98 * 100;
EGL0049E 値 -9,700 を n に割り当てる際に、オーバーフロー・エラーが発生しました。
if (!element in myArray)
その意図に反して、「not」演算子が in 演算子より優先順位が高いため、EGL は配列で false 値を検索します。これは開発者が予期しなかったことです。
n NUM(3) = (100 - 98) * 100;
if (!(element in myArray))
| プラットフォーム | 問題 |
|---|---|
| COBOL 生成と Java™ 生成 | 剰余演算子 (%) は、COBOL と Java 間において、両方のオペランドが整数である場合、その結果には一貫性があります。しかし、オペランドに小数部が含まれている場合、 この 2 つの言語は別々の丸めアルゴリズムを採用するため、両者の剰余は異なる場合があります。 |
| JavaScript 生成 | 3 つのビット単位演算子 (&、|、および Xor) はサポートされません。in 演算子もサポートされません。 |