USAGE 句

USAGE 句は、コンピューターの記憶域にデータ項目の形式を指定する。

一般形式

指令

  1. 予約語リストのフラグ付けおよび修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • COBOL370 - USAGE PROCEDURE-POINTER データ項目に割り当てる記憶域を 4 バイトとするか 8 バイトとするかを制御する。
    • COMP-5 - USAGE COMP-5 データ項目に格納するときに、演算符合の取り扱いを制御する。
    • IBMCOMP - USAGE COMP および USAGE COMP-5 のデータ項目に割り当てる記憶域を制御する。

構文規則

  1. USAGE 句はレベル 66 または 88 のデータ記述項には指定できない。
  2. USAGE 句を集団項目のデータ記述項に書いた場合、それに属するすべての基本項目または集団項目の記述項にも書いて構わない。しかし、どちらの項目にも同じ使用法を記述しなければならない。
  3. 宣言に USAGE 句を持つ基本データ項目、または宣言に USAGE 句を持つ集団項目に従属する基本データ項目は、USAGE 句が COMPUTATIONAL

    ANS85 、BINARY、PACKED-DECIMAL

    OSVSVSC2MFXOPEN 、COMPUTATIONAL-3

    OSVSVSC2MF 、COMPUTATIONAL-4

    MFXOPENOS390 、または COMPUTATIONAL-5

    のいずれかを記述している場合、数字項目を定義する PICTURE 文字列で記述しなければならない (つまり、PICTURE 文字列が記号「P」、「S」、「V」、「9」だけを含んでいること)。「PICTURE 句」のトピックを参照。

    MF 宣言に USAGE 句を持たない基本データ項目が、宣言に USAGE 句を持つ集団項目に従属する場合、その USAGE 句は、英字、英数字、英数字編集、数字編集のデータ項目を定義した PICTURE 文字列で記述されたリストの形式で記述してもよい。

  4. MFXOPENOS390 宣言に USAGE 句を持つ基本データ項目、または宣言に USAGE 句を持つ集団項目に従属する基本データ項目は、USAGE 句が COMPUTATIONAL-5

    MF または COMPUTATIONAL-X

    を記述している場合、数字項目を定義する PICTURE 文字列で記述しなければならない。

    MF または、サイズが 1 から 16 バイトの数字項目を定義する PICTURE 文字列で記述しなければならない。サイズが 1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、または 16 バイトの英数字項目の場合、それぞれ 2、4、7、9、12、14、16、18、19、21、24、26、28、31、33、36 または 38 の小数点位置である整数項目を記述したことと同じになる。

    MF PICTURE 文字列に含められる桁数は 38 までである。

    MF COMPUTATIONAL-X を指定し、PICTURE 文字列が数字項目を定義している場合、その項目には符号を付けてはならない。

  5. BLANK WHEN ZERO 句、JUSTIFIED 句、SIGN 句は、使用法が明示的にも暗黙的にも DISPLAY でないデータ項目には指定してはならない。
  6. SYNCHRONIZED 句および VALUE 句は、使用法が INDEX のデータ項目に指定してはならない。

    OSVSVSC2MF SYNCHRONIZED 句は、使用法が INDEX のデータ項目に指定してもよい。

  7. COMP は、COMPUTATIONAL の省略形である。

    OSVSVSC2MF COMP-1 は COMPUTATIONAL-1 の省略形である。

    OSVSVSC2MF COMP-2 は COMPUTATIONAL-2 の省略形である。

    OSVSVSC2MFXOPEN COMP-3 は COMPUTATIONAL-3 の省略形である。

    OSVSVSC2MF COMP-4 は COMPUTATIONAL-4 の省略形である。

    MFXOPENOS390 COMP-5 は COMPUTATIONAL-5 の省略形である。

    MF COMP-X は COMPUTATIONAL-X の省略形である。

  8. 指標項目を明示的に参照できるのは、SEARCH (表引き) 文、SET (設定) 文、比較条件、手続き部の USING (使用) 指定、

    OSVSVSC2MF ENTRY (導入) 文の USING 指定、

    ANS85 組み込み関数の引数、

    ISO2002MF INVOKE 文の USNIG 指定、インライン メソッド呼び出しの引数、

    ANS85 INITIALIZE 文、

    または CALL (呼び出し) 文の USING 指定だけである。

  9. ISO2002VSC2MFCOB370 ISO2002VSC2MF ポインター

    MFCOB370 または手続きポインター

    VSC2MF 項目を明示的に参照できるのは、SET (設定) 文、比較条件、CALL (呼び出し) 文、手続き部の USING (使用) 指定、ENTRY (導入) 文の USING 指定、

    ISO2002 INVOKE 文、メソッドのインライン呼び出しの引数リスト、関数の引数リストだけである。

  10. USAGE IS INDEX、

    ISO2002 OBJECT、

    VSC2MF POINTER、

    MFCOB370 PROCEDURE-POINTER

    MF EVENT-POINTER、MONITOR-POINTER、MUTEX-POINTER、PROCEDURE-POINTER、SEMAPHORE-POINTER、THREAD-POINTER

    句のいずれかで定義された基本データ項目は、条件変数であってはならない。

  11. MF typedef-name-1 は、TYPEDEF 句のレコードと同じソース ファイル内で前に定義しなければならない。
  12. MF USAGE typedef-name-1 を指定した場合、以下の句は指定できない。
    • BLANK
    • JUSTIFIED
    • PICTURE
    • SIGN
    • SYNCHRONIZED
    • VALUE
  13. MF 同じ階層の高位レベルに明示的な USAGE 句がある場合、USAGE typedef-name-1 の指定はエラーとなる。
  14. MF USAGE typedef-name-1 を指定した項目の直後に、従属する項目 (78 以外の高位レベル番号の項目) を記述した場合、エラーとなる。
  15. ISO2002 USAGE OBJECT REFERENCE 句は、集団項目用のデータ記述項に指定してはならないが、従属する基本データ項目には指定してもよい。
  16. ISO2002 USAGE OBJECT REFERENCE 句をファイル節に記述してはならない。

    MF USAGE OBJECT REFERENCE 句をファイル節に記述してもよい。

    注: オブジェクト参照が、アプリケーション ロジックのアクティブなオブジェクトを参照しているかどうかによる。
  17. ISO2002 ACTIVE-CLASS 指定は、ファクトリ定義、オブジェクト定義、メソッド定義にだけ記述できる。
  18. MF 使用法が EVENT-POINTER のデータ項目は、CLOSE 文、OPEN 文、SET 文、WAIT 文、または USING 指定でのみ明示的に参照できる。
  19. MF 使用法が MONITOR-POINTER、MUTEX-POINTER、または SEMAPHORE-POINTER のデータ項目は、CLOSE 文、OPEN 文、SET 文、または USING 指定でのみ明示的に参照できる。
  20. MF 使用法が THREAD-POINTER のデータ項目は、START 文、WAIT 文、または USING 指定でのみ明示的に参照できる。
  21. MF 

    NATIONAL"1" の指令設定が有効になっている場合、記述に USAGE NATIONAL 句を含む基本データ項目、または記述に USAGE NATIONAL 句を含む集団項目に従属する基本データ項目は、各国文字項目を記述する PICTURE 文字列で宣言されなければならない。

    NATIONAL"2" の指令設定が有効になっている場合、記述に USAGE NATIONAL 句を含む基本データ項目、または記述に USAGE NATIONAL 句を含む集団項目に従属する基本データ項目は、各国文字項目、各国文字編集項目、数値項目、数値編集項目、または外部浮動小数点数項目を記述する PICTURE 文字列で宣言されなければならない。

  22. NLS-CURRENCY-LENGTH 指令が有効になっている場合、または CURRENCY SIGN IS 句が SPECIAL-NAMES 段落で指定されている場合、各国文字数値編集項目に通貨記号を含めることはできない。
  23. MF 基本データ項目、およびそのデータ項目が属するどの集団に対しても USAGE 句を指定しない場合は、以下が適用される。
    1. 明示的または暗黙的な PICTURE 文字列が記号「N」を含む場合、USAGE NATIONAL 句が暗黙的に指定される。
    2. それ以外の場合、USAGE DISPLAY 句が暗黙的に指定される。
  24. MF OBJECT REFERENCE 指定、POINTER 指定、または PROGRAM-POINTER 指定を伴う USAGE 句は、レベル 1 の基本データ項目以外に指定してはならない。

    この規則は強制しない。

  25. MF program-prototype-name-1 を指定する場合、記述項の左辺に TYPEDEF 句を指定しなければならない。

    この規則は強制しない。

  26. MF 

    NATIONAL"1" の指令設定が有効になっている場合、NATIONAL 指定は、明示的または暗黙的な PICTURE 文字列に記号「N」が含まれている基本データ項目に関連付けられた USAGE 句にのみ記述できる。

    NATIONAL"2" の指令設定が有効になっている場合、NATIONAL 指定は、記号「9」を含む PICTURE 文字列にも記述できるが、SIGN IS SEPARATE 句を使用して符号付き数値データ項目を記述しなければならない。

  27. NETJVM CONDITION-VALUE 指定を伴う USAGE 句は、レベル 1 の基本データ項目以外に指定してはならない。
  28. NETJVM EVENT 指定を記述する場合、class-name-1 はデリゲート定義を参照するものとし、FACTORY 指定は記述してはならない。
  29. integer-1 には 1 から 16 までの値を指定しなければならない。

一般規則

  1. 集団レベルに USAGE 句を書いた場合、その集団に属する各基本項目に対してその USAGE 句が適用される。

    MF ただし、PICTURE 句があり、データ項目の定義が文字である場合を除く。

  2. USAGE 句は、コンピューターの記憶域内におけるデータ項目の表現形式を指定する。USAGE 句は、データ項目の使い方には影響を与えない。ただし、手続き部の文の中には、作用対象を特定の USAGE 句を伴う基本項目に限定するものがある。USAGE 句は項目の基数または文字表現の種類に影響することがある。各使用法の形式の詳細については、「COBOL 言語の概念」の章の「文字の表現と基数の選定」のセクションを参照。
  3. USAGE IS BINARY 句は、コンピューターの記憶域内で数値項目を表現するのに基数 2 を使用することを定義する。この句は、USAGE IS COMPUTATIONAL と同義である。
  4. USAGE IS PACKED-DECIMAL 句は、コンピューターの記憶域内で数値項目を表現するのに基数 10 を使用することを定義する。またこの句は、各桁位置がコンピューターの記憶域内で最小限の構成を占めるように定義する。

    OSVSVSC2MFXOPEN この句は、USAGE IS COMPUTATIONAL-3 と同義である。

  5. USAGE IS DISPLAY 句は、コンピューターの記憶域内でデータ項目を表現するのに (明示的または暗黙的に) 標準のデータ形式を使用することを定義する。データ項目は文字境界上で整列される。
  6. OSVSVSC2MF USAGE IS DISPLAY 句は、下記の種類の項目に適用できる。
    • アルファベット
    • 英数字
    • 英数字編集
    • 数値編集
    • 外部浮動小数点数
    • 外部 10 進数 (数値)
  7. USAGE IS INDEX 句を指定した基本項目を、指標データ項目という。指標データ項目には、表の要素の出現番号に相当する値を収める。
  8. MOVE 文または入出力文の中で参照される集団項目の一部に指標データ項目、

    VSC2MF またはポインター データ項目、

    MFCOB370 または手続きポインター データ項目

    が含まれていてもよい。この場合、指標データ項目、

    VSC2MF またはポインター データ項目、

    MFCOB370 または手続きポインター データ項目

    の変換は行われない。

  9. OSVSVSC2MF USAGE IS COMPUTATIONAL-4 句は、USAGE IS COMPUTATIONAL と同義である。
  10. VSC2MF USAGE IS POINTER 句は、データ項目のアドレスを格納するデータ項目を識別する (「SET 文」のトピックを参照)。
  11. MFCOB370  USAGE IS PROCEDURE-POINTER 句は、データ項目が手続きのアドレスを格納する手続きポインター データ項目であることを指定する(「SET 文」のトピックを参照)。参照する対象の手続きはどんな言語で書いてあってもよい。COBOL の場合、それは入れ子になっていないポインターの手続き部を表す。下記のどちらかによって識別する。
    • プログラム名段落のプログラム名
    • ENTRY 文のエントリ名
  12. MF typedef-name-1 を基本項目として指定した場合、「USAGE typedef-name-1」句は、typedef-name-1 によって参照されるプログラマー定義の使用法と同じ属性を持つ基本項目を指定することになる。
  13. MF typedef-name-1 を集団項目として指定した場合、「USAGE typedef-name-1」句は、同一の構造を持つ集団項目を指定することになる。その効果は、typedef-name-1 によって識別されるデータ記述項の下位にあるデータ宣言が、「USAGE typedef-name-1」句で宣言された項目の下位に、まったく同様に指定されたかのようになる。下位のデータ項目のデータ名は、typedef-name-1 によって参照されるプログラマー定義の構造体の中に宣言されているものと同じになる。それらを一意に参照するには、データ名の修飾を行う。
  14. ISO2002MF USAGE OBJECT REFERENCE 句を用いて記述したデータ項目をオブジェクト参照と呼ぶ。オブジェクト参照は字類がオブジェクトであり項類がオブジェクト参照であるデータ項目である。オブジェクト参照の内容は null またはオブジェクトへの参照である。ただし、下記の規則に従う。
    1. オブジェクト参照データ項目に割り当てられる記憶域のサイズは 4 バイトである。
    2. オプションの指定を何も書かないと、そのデータ項目は一般的オブジェクト参照となる。その内容は任意のオブジェクトの参照先であってよい。
    3. interface-name-1 を指定した場合、そのデータ項目によって参照されるオブジェクトは interface-name-1 を実装しなければならない。
    4. class-name-1 を指定した場合、そのデータ項目によって参照されるオブジェクトは、class-name-1 のオブジェクトまたは class-name-1 のサブクラスのオブジェクトでなければならない。ただし、下記の規則に従う。
      1. ONLY 指定を書かなかった場合:
        1. FACTORY 指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ オブジェクトまたは指定したクラスのサブクラスのファクトリ オブジェクトでなければならない。
        2. FACTORY 指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトまたは指定したクラスのサブクラスのオブジェクトでなければならない。
      2. ONLY 指定を書いた場合:
        1. FACTORY 指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ オブジェクトでなければならない。
        2. FACTORY 指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトでなければならない。
    5. ACTIVE-CLASS を指定した場合、そのデータ項目によって参照されるオブジェクトは、その参照されるオブジェクトが指定されているメソッドを呼び出すのに使用されたオブジェクトが属するクラスのオブジェクトでなければならない。ただし、下記の規則に従う。
      1. FACTORY 指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのファクトリ オブジェクトでなければならない。
      2. FACTORY 指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのオブジェクトでなければならない。
  15. MF USAGE IS EVENT-POINTER 句は、ソフトウェア イベントの発生時にフラグを設定する同期データ項目を識別する。イベント データ項目の値は、TRUE または FALSE である。
  16. MF USAGE IS MONITOR-POINTER 句は、モニターと呼ばれる同期データ項目を識別する。このデータ項目について、読み取りロック、参照ロック、書き込みロックを要求することができる。
    注: モニターは、通常、複数のスレッドが読み取りまたは書き込みを行う可能性のあるデータ構造を保護するために使用される。
  17. MF USAGE IS MUTEX-POINTER 句は、ミューテックスと呼ばれる同期データ項目を識別する。このデータ項目を使用して、マルチスレッド アプリケーションの重要な節を保護することができる。ミューテックス データ項目の値は、ON または OFF である。ON 状態のミューテックス データ項目を持つことができるのは、一度に 1 つのスレッドのみである。
  18. MF USAGE IS SEMAPHORE-POINTER 句は、数を数える同期データ項目を識別する。このデータ項目が負の値になることはない。
  19. MF USAGE IS THREAD-POINTER 句は、スレッドのハンドルを格納するデータ項目を識別する。
  20. ISO2002MF 明示的または暗黙的な USAGE IS NATIONAL 句は、各国文字符号化文字でコンピューターに格納されて文字境界上に配置されるデータ項目を識別する。各国文字は、コンピューターの記憶域で同一サイズの文字として表される。詳細については、各国文字データ (UNICODE) に関する COBOL システムのドキュメントを参照。
  21. ISO2002MF USAGE IS BINARY-CHAR、USAGE IS BINARY-SHORT、USAGE IS BINARY-LONG、USAGE IS BINARY-DOUBLE の各句は、コンピューターの記憶域で 2 の基数を持つ数値データ項目を識別する。これらの使用法は、以下に示す PICTURE 文字列で USAGE IS COMP-5 を指定することと同等である。USAGE 句で UNSIGNED 指定が記述されている場合を除き、同等の PICTURE 文字列には S が含まれる。
    USAGE 同等の PICTURE 文字列
    BINARY-CHAR [S]9(2)
    BINARY-SHORT [S]9(4)
    BINARY-LONG [S]9(9)
    BINARY-DOUBLE [S] 9(18)
  22. ISO2002MF USAGE IS FLOAT-SHORT 句は、USAGE IS COMPUTATIONAL-1 と同義である。
  23. ISO2002MF USAGE IS FLOAT-LONG 句は、USAGE IS COMPUTATIONAL-2 と同義である。
  24. ISO2002MF USAGE PROGRAM-POINTER 句を指定するデータ記述項は、手続きポインター データ項目を指定する。このデータ項目は、プログラム ポインターおよび手続きポインターとも呼ばれ、プログラムのアドレスを含むことができる(「SET 文」のトピックを参照)。参照する対象の手続きはどんな言語で書いてあってもよい。COBOL の場合、それは入れ子になっていないポインターの手続き部を表す。下記のどちらかによって識別する。
    • プログラム名段落のプログラム名
    • ENTRY 文のエントリ名
  25. ISO2002MF program-prototype-name-1 を指定した場合、そのデータ項目は制限されたプログラム ポインターとなる。制限されたプログラム ポインターは、定義済みのアドレス、NULL、または指定された program-prototype-name で識別されたものと同じシグネチャのプログラムのアドレス以外を含むことはできない。
  26. NETJVM USAGE IS CONDITION-VALUE 句は、TRUE または FALSE の値を持つことができるブール値データ項目を指定する。CONDITION-VALUE ブール値データ項目は、.NET フレームワークの System.Boolean 型に対応する。そのため、真または偽を表す値を格納するデータ項目を、System.Boolean パラメーターを受け付けるメソッドに渡すことができる。
  27. NETJVM USAGE IS OBJECT REFERENCE クラス名句の中で指定されたクラス名が値型の場合は、コンパイラ警告が出力される。その項目は値型として扱われることになる。つまり、いかなる参照も生成されない。
  28. NETJVM USAGE IS クラス名句は、以下のように指定する。
    • クラス名が参照型を参照する場合、この句は USAGE OBJECT REFERENCE class-name-1 とまったく同等である。そのデータ項目は、ヒープ上で割り当てられたオブジェクトへの参照または NULL 値を表す。
    • クラス名が値型を参照する場合、この句は値型であるデータ項目を指定する。
  29. NETJVM EVENT 指定を記述した場合、add_ChangeEvent および remove_ChangeEvent という 2 つのメソッドが自動的に作成される。これらのメソッドを使用して、それぞれ、デリゲートへの新しいメソッドのフック、およびそのメソッドの削除を行うことができる。
  30. ISO2002MF USAGE BIT 句は、ブール値データ項目を表現するのにビットを使用することを指定する。USAGE BIT を使用して記述されたデータ項目は、ビット データ項目となる。ブール値データ項目の整列方法については、「ビット データ項目の整列」のトピックを参照。
  31. integer-1 は、バイナリ (基数 2) データ項目に割り当てられるバイト数を指定する。IBMCOMP 指令を指定した場合、必要に応じて、指定したバイト数以上である次の語の記憶域のバイト数に値が調整される。長さ指定では、PICTURE 文字列中の 9 記号の数に基づいてバイナリ データ項目に割り当てられるバイト数よりも小さい値、等しい値、または大きい値を指定できる。
  32. integer-1 の長さ指定が集団レベルの USAGE 句で記述されている場合、長さ指定は、その集団に従属する各バイナリ データ項目に適用される。ただし、異なる長さ指定を指定する別の集団にデータ項目が従属している場合、または基本データ項目自体が特定の長さ指定を使用して記述されている場合を除く。つまり、長さ指定がある最も近い包含集団が、独自の長さ指定がない集団内のバイナリ データ項目に適用される。