式は、一次式、算術式、または条件式に分類されます。算術式および条件式は、演算子で区切られた一連の一次式から構成されます。
primary-expression unary-expression binary-expression

literal

data-item

Parenthesized-expression

non-parameterized-member-access

type-specifier

method-invocation-expression

type-specifier 手続き部の見出しメソッド署名または手続き部ヘッダーのいずれかで、メンバーに渡されるパラメーターおよび返される項目を指定できます。メソッド署名でパラメーターが指定されている場合は、手続き部ヘッダーをメソッドから省略する必要があります。手続き部ヘッダー

詳細は次のとおりです。

positional-argument
メソッド定義内の同じ位置にあるパラメーターに対応する式。
param-name
位置引数 (positional-argument) のいずれにも対応しない、メソッド定義で定義されたパラメーターの名前。

位置引数または名前付き引数のいずれにも対応しない、メソッドによって定義されたパラメーターは、オプションのパラメーター (つまり、デフォルト値を持つパラメーター) である必要があります。

chained-constructor

type-specifier 手続き部の見出しメソッド署名または手続き部ヘッダーのいずれかで、メンバーに渡されるパラメーターおよび返される項目を指定できます。メソッド署名でパラメーターが指定されている場合は、手続き部ヘッダーをメソッドから省略する必要があります。手続き部ヘッダー

詳細は次のとおりです。

positional-argument
コンストラクター定義内の同じ位置にあるパラメーターに対応する式。
param-name
位置引数のいずれにも対応しない、コンストラクター定義で定義されたパラメーターの名前。

positional-argument、named-argument、property-initializer のいずれも、インスタンス データまたはローカル データを参照できません。通常、これらは現在のコンストラクターの引数を参照します。

object-creation-expression

型指定子 - 構文

詳細は次のとおりです。

positional-argument
コンストラクター定義内の同じ位置にあるパラメーターに対応する式。
param-name
位置引数のいずれにも対応しない、コンストラクター定義で定義されたパラメーターの名前。
property-name
作成されるクラスに関連付けられるインスタンス プロパティの名前。新しいオブジェクトの作成後、その名前のプロパティは property-initializer の値に初期化されます。

位置引数または名前付き引数のいずれにも対応しない、コンストラクターによって定義されたパラメーターは、オプションのパラメーター (つまり、デフォルト値を持つパラメーター) である必要があります。

delegate-invocation-expression

詳細は次のとおりです。

primary-expression
デリゲート型のオブジェクトに解決される必要があります。
positional-argument
デリゲート定義内の同じ位置にあるパラメーターに対応する式。
param-name
位置引数のいずれにも対応しない、デリゲート定義で定義されたパラメーターの名前。

位置引数または名前付き引数のいずれにも対応しない、デリゲートによって定義されたパラメーターは、オプションのパラメーター (つまり、デフォルト値を持つパラメーター) である必要があります。

subscript-expression

[ subscript ] ( subscript )

詳細は次のとおりです。

[ subscript...]
角かっこ [ ] は、下付き文字がゼロ ベースであることを示します。次に例を示します。
     myArray[5]   *> sixth item in the array

角かっこを使用して、インデクサー式にパラメーターを渡すこともできます。

( subscript...)
丸かっこ ( ) は、下付き文字が 1 ベースであることを示します。次に例を示します。
     myArray(5)   *> fifth item in the array
この形式の添え字式は、COBOL プログラムで OCCURS 句を使用して定義された項目に対してのみ使用できます。メンバー アクセスまたはメソッド呼び出し式によって返される配列の要素にアクセスするために使用することはできません。また、インデクサーにアクセスするために使用することもできません。

reference-modification-expression

一次式は文字列型である必要があります。オフセットは整数型である必要があります。長さの式は省略することもできますが、指定する場合は、整数型である必要があります。

部分参照式の結果は、指定されたオフセット (0 ベース) から、指定された長さだけ、または長さの式が省略されている場合には元の文字列の最後まで、元の文字列のサブストリングを取得して形成された文字列値です。

オフセット式、またはオフセット式および長さの式の合計が、元の文字列の長さよりも大きい場合、例外がスローされます。

concatenation-expression

右側の primary-expression 自体は連結式ではありません。連結式の結果は、すべての作用対象を連結して形成された文字列値です。いずれかの作用対象が文字列型でない場合は、連結に使用される前に、ToString (.NET) または toString (JVM) メソッドがその作用対象に適用されます。

cast-expression

キャスト式は、参照型変換や明示的なユーザー変換など、明示変換を指定するために使用されます。オプションの IF を指定せずにキャストが失敗すると、例外がスローされます (.NET の場合は InvalidCastException、JVM の場合は ClassCastException)。IF を指定してキャストが失敗した場合、例外はスローされず、ターゲット オブジェクトは null に設定されます。詳細については、「明示参照変換」セクションを参照してください。

type-of-expression

anonymous-method-expression

DELEGATE
procedure-division
END-DELEGATE

手続き部は、0 個以上のパラメーターおよびオプションの戻り項目を指定できる手続き部の見出しで開始できます。

method-group-expression

指定された型に属する、指定された名前を持つメソッドを表します。インスタンス メソッドの場合、メソッド グループ式はオブジェクト インスタンスもカプセル化します。

メソッド グループ式は、デリゲート型と互換性のあるメソッド グループのメンバーを選択することによって、デリゲート型に暗黙的に変換されます。

例:

01 del type MyDelegate.
01 o type MyType.
set del to method o::Meth1

コンパイラは、MyDelegate と同じシグネチャを持つ MyType の Meth1 のオーバーライドをポイントするように del を設定します。

arithmetic-expression

算術式は、単項式またはバイナリ式のいずれかになります。どちらの場合でも、演算の対象となる式は次のようになります。

  • 数値式。
  • 適切な演算子のオーバーロードが定義されている型の式。
  • バイナリ + の場合、左の式は列挙型で右の式は整数型、またはその逆になります。結果は同じ列挙型です。
  • バイナリ - の場合、両方の式が同じ列挙型であるか、または左の式が列挙型で右の式が整数型になります。最初の場合の結果は、その型が列挙の基本となる型である値です。2 番目の場合では、結果は同じ列挙型です。
  • バイナリ b-and、b-or、b-xor の場合、両方の式が同じ列挙型になります。結果は同じ列挙型です。
  • バイナリ + およびバイナリ - の場合、両方の式が同じデリゲート型であるか、一方の式がデリゲート型でもう一方の式が互換性のある匿名メソッドまたはメソッド グループになります。結果は同じデリゲート型です。

size-of-expression

expression は次のいずれかになります。
  • 文字列型の項目
  • 任意の型の一次元のマネージ配列
  • コレクション型の項目
注: SIZE OF 指定の語 OF は、通常はオプションですが、DISPLAY 文 (式が DISPLAY の最初の作用対象ではない場合) では必須です。

table-of-expression

マネージ COBOL で配列をインラインで作成するのに役立ちます。

次に例を示します。

set myArray to table of ( "abc", "bcd" )

これは次と同等です。

set content of myArray to ( "abc", "bcd" )

多次元配列の作成例:

declare myArray as string occurs any any = table of string (
               ("abc", "def")
               ("ghi", "jkl")
           )
注: 多次元配列は JVM 環境には存在しません。

unary-expression

unary-operator

unary-operator は、「+」、「-」、または「b-not」のいずれかです。

binary-expression

binary-operator

binary-operator は、「+」、「-」、「*」、「/」、「**」、「b-and」、「b-or」、「b-xor」、「b-left」、「b-right」のいずれかです。

バイナリ式に複数の 2 項演算子が含まれている場合、演算の実行順序は、次のように演算子の優先順位によって決まります。
  1. 右シフトおよび左シフト (b-right および b-left)
  2. バイナリ or (b-or)
  3. バイナリ xor (b-xor)
  4. バイナリ and (b-and)
  5. 指数演算 (**)
  6. 乗算および除算 (* および /)
  7. 加算および減算 (+ および -)

評価の順序は、かっこで囲んだ式を使用して変更できます。

conditional-expression

条件式は、一次条件式または組み合わせ条件式になります。

一次条件式は次のようになります。

  • ブール型に評価される算術式
  • 関係演算子で区切られた 2 つの算術式から成る関係条件
  • 否定一次条件式
  • かっこで囲まれた条件式
  • INSTANCE OF 式
  • CONTAINS 式

関係演算子は、次のいずれかです。各行には、同じ演算子のバリアントが示されています。

=   EQUALS
<> NOT= NOT EQUALS
>   GREATER [THAN]
<   LESS [THAN]
>= NOT< GREATER [THAN] OR EQUAL

NOT LESS [THAN]

<= NOT> LESS [THAN] OR EQUAL

NOT GREATER [THAN]

INSTANCE OF 式の形式は次のとおりです。

CONTAINS 式の形式は次のとおりです。

expression-1 は次のいずれかに評価されます。

  • DICTIONARY 型および expression-2 のオブジェクトは、その型が辞書のキー型であるオブジェクトに評価されます。
  • LIST 型および expression-2 のオブジェクトは、その型がリストの要素型であるオブジェクトに評価されます。

await-expression

注: .NET COBOL にのみ適用されます。

primary-expression の型でメソッド GetAwaiter() を実装する必要があります。この GetAwaiter メソッドによって返される型が GetResult メソッドを持つ場合、await-expression の型はその GetResult メソッドによって返される型と同じです。それ以外の場合、await-expression の型は void です。

void 型の await-expression は、INVOKE 文を使用して指定できます。

void 型でない await-expression は、解決された型の式を使用できる場合であればいつでも使用できます。

ほとんどの場合、primary-expression の型は System.Threading.Tasks.Task または System.Threading.Tasks.Task[T] のいずれかになり、これらは上記の条件を満たします。前者の場合は await-expression の型は void であり、後者の場合は await-expression の型は T です。