演算子

デフォルトの演算子のセットはあらかじめ定義されて実装されます。演算子をオーバーロードして、その演算子に独自の動作を定義できます。

operator-specification

operator-header procedure-division

operator-header

operator-name attribute-clause

operator-name

binary-operator
comparison-operator arithmetic-operator bitwise-operator
  • =
  • <>
  • <=
  • <
  • >=
  • >
  • +
  • -
  • *
  • /
  • **
  • B-AND
  • B-OR
  • B-XOR
  • B-NOT
  • B-LEFT
  • B-RIGHT
unary-operator
  • +
  • -
  • EXPLICIT
  • IMPLICIT

       operator-id + .
       01 iMins binary-long.
       01 iHour binary-long.
       procedure division
             ...
       end operator.

演算子のオーバーロードのサンプルも参照してください。このサンプルは、[スタート > すべてのプログラム > Micro Focus Enterprise Developer > Samples] の COBOL for JVM の下にあります。

変換演算子、IMPLICIT および EXPLICIT

変換演算子はオーバーロードできるため、適切な変換演算子が呼び出しコードのパラメーター タイプに従って使用されます。署名 (手続き部の USING 句) が一致する演算子が実行されます。例えば、タイプ Timer のデータ項目を binary-long に変換する必要がある場合、使用される演算子は、入力パラメーターのタイプが Timer で 出力パラメーターのタイプが binary-long の演算子になります。

変換演算子を定義して使用するには、次のようにします。

  • operator-id ヘッダでキーワード IMPLICIT または EXPLICIT を使用します。
  • 演算子は、演算子の署名 (手続き部の USING 句) で指定されるタイプを変換します。
  • 変換されるタイプは、クラスまたは値タイプになり、インターフェイスにはなりません。
  • 相互に継承するタイプは、変換演算子を使用して変換できません。
  • 同じ変換は 2 回 (1 回は黙示的、もう 1 回は明示的) 定義することはできません。

演算子のオーバーロード

演算子をオーバーロードして、代替動作やさまざまなオペランド タイプに対する動作を提供できます。例えば、Timer タイプを時間と分で表現する場合、2 つの Timer を追加する 1 つの + (プラス) 演算子と、分を Timer タイプに追加するもう 1 つの + (プラス) 演算子を定義できます。

オーバーロードする演算子を宣言するには、次のようにします。

  • オーバーロードされた演算子は public および静的になります。これらは、抽象、最終、またはオーバーライドで定義することはできません。
  • 演算子の署名のパラメーターは、値で宣言する必要があります。
  • 次の演算子をオーバーロードでき、次の operator-id 署名が必要です。
オーバーロードできる演算子 operator-id 署名のオーバーロード
次のような条件付き演算子:

t1 = t2, t1 equals t2

値 t1 t2 は条件 - 値を戻す

条件付き演算子はペアで指定する必要があります。等号演算子 (=) を宣言する場合、不等号演算子 (<>) も宣言する必要があります。
次のようなバイナリ演算子:

t1 + t2

値 t1 t2 は t3 を戻す

バイナリ演算子には 2 つの引数が必要です。バイナリ演算子の場合、演算子のペアを指定して、2 つのオペランドがいずれかの順序で渡されるようにする必要があります。
次のような単項演算子:

-t1

値 t1 は t3 を戻す

単項オーバーロード演算子で使用できる引数は 1 つのみです。
次のような論理演算子:

t1 b-or

値 t1 t2 は t3 を戻す

 
次のようなシフト演算子:

t1 b-right

値 t1 t2 は t3 を戻す

 

加減乗除の算術演算子はすべてオーバーロードできますが、それらに相当する動詞はオーバーロードできません。例えば、次の文の ADD はオーバーロードできません。

       add a to b giving c 

オーバーロードする演算子を使用するには、オーバーロードされた演算子が範囲内にある必要があります。