列挙

列挙は、曜日の値などの定数値のリストを表す。その値やシンボリック名を定義する列挙型を宣言できる。その後、値を名前別に参照できる。

コンテキスト:

プログラム構造 

enum-specification

列挙の仕様 enum-header type-specifier enum-field

enum-header

列挙見出しの構文 access-modifier attribute-clause

enum-field

列挙フィールドの構文 type-specifier type-specifier

enum-id Action.
   78 #Start.   *> Start is a reserved word so use '#' symbol
   78 #Stop.
   78 #Rewind.
   78 #Forward.
end enum.

enum-id Status.
   78 Flunk value 50.
   78 Pass  value 70.
   78 Excel value 90.
end enum.

class-id MainClass.
method-id main static.
   declare a = type Action::Stop
   if a not = type Action::Start
       display a & " is " & a as binary-long   *> Prints "Stop is 1"
    end-if
   display type Status::Pass as binary-long    *> prints 70
   display type Status::Pass *> prints "Pass"
end method.
end class.

01 レベルの記述項の例:

       enum-id Permission.
       01 #Execute value 1 b-left 0.
       01 #Write value 1 b-left 1.
       01 #Read value 1 b-left 2.
       end enum.

列挙のサンプルも参照。このサンプルは、Start > All Programs > Micro Focus Enterprise Developer > Samples > Visual COBOL Samples、 の場合JVM COBOL 言語リファレンスの場合 に用意されている。

その他の情報

enum-header の後には、次の規則に従う 1 つ以上のフィールド定義が続く。

  • 列挙の基本となるデフォルトの型は binary-long (符号付き 32 ビット整数など) である。
  • 最初の列挙フィールドが 01 レベルの記述項である場合は、type-specifier を使用して、列挙の基本となる型を明示的に定義できる。さらに、名前がある場合は、列挙の最初の定数フィールドにもなる。
  • 後続の定数フィールドは、レベル 78 の記述項またはレベル 01 の記述項のいずれかを使用して定義できる。01 レベルの記述項の場合、語 CONSTANT が想定されるため省略できる。
  • 最初の定数フィールドに明示的な VALUE 句がない場合、値は 0 であると見なされる。
  • 後続のすべての定数記述項は、明示的な値を持つか、前の記述項の値より 1 大きいデフォルト値を想定する。
  • レベル 78 の記述項に関連付けられた定数式は、レベル 78 の記述項の通常の規則に従って評価される。つまり、算術演算は、演算子の優先順位に関係なく、左から右に評価される。
  • レベル 01 の記述項に関連付けられた定数式は、レベル 01 の定数記述項の通常の規則に従って評価される。これらの定数記述項の VALUE 式は外部定数を参照でき、それらが定義する算術演算は通常の算術式の優先順位規則に従って評価される。
注:
  • JVM COBOL では、Java と同様に、列挙宣言で列挙クラスが定義される。このクラスは、java.lang.Enum から派生するクラスである。Java では、この列挙クラスはメソッドおよびその他のフィールドを利用者が明示的に宣言できるが、COBOL では許容されない。
  • JVM COBOL では、コンパイラは、列挙の値を含む配列を返す「values」という静的メソッドを追加する。このメソッドと PERFORM THROUGH コンストラクトを一緒に使用して、列挙型の値を反復できる。次に例を示す。
           enum-id E1.
           78 #Zero.
           78 One.
           end enum.
           program-id x.
               display type E1::Zero
               display type E1::One
               perform varying auto e through type E1::values
                   display e
               end-perform