演算子

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

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-LEFT
  • B-RIGHT
unary-operator
  • +
  • -
  • B-NOT
  • EXPLICIT
  • IMPLICIT

class-id MyType.
operator-id + 
procedure division using by value o as type MyType, I as binary-long
                           returning ret as type MyType.  
  ...
end operator.
end class.

演算子のオーバーロードのサンプルも参照してください。このサンプルは、[スタート > すべてのプログラム > Micro Focus Visual COBOL > Samples][COBOL for JVM (Windows) または$COBDIR/demo (UNIX)]. の下にあります。

変換演算子、IMPLICIT および EXPLICIT

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

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

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

演算子のオーバーロード

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

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

  • オーバーロードされた演算子は public および静的になります。
  • 演算子の署名のパラメーターは、値で宣言する必要があります。これには returning 項目が必要です。
  • 次の演算子をオーバーロードでき、次の operator-id 署名が必要です。
オーバーロードできる演算子 operator-id 署名のオーバーロード
次のような比較演算子:

t1 = t2, t1 equals t2

value t1 t2 returning condition-value

比較演算子はペアで指定する必要があります。ペアは、等号演算子 (=) と不等号演算子 (<>)、大なり演算子 (>) と小なり演算子 (<)、および以上演算子 (>=) と以下演算子 (<=) です。

returning 項目は condition-value タイプにする必要があります。

次のようなその他の 2 項演算子:

t1 + t2

value t1 t2 returning t3

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

-t1

value t1 returning t3

単項演算子で使用される引数は 1 つのみです。

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

       add a to b giving c