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、

    BINARY、PACKED-DECIMAL、

    COMPUTATIONAL-3、

    COMPUTATIONAL-4、

    およびCOMPUTATIONAL-5

    のどれかを記述している場合、数字項目を定義するPICTURE文字列で記述しなければならない。 (たとえば、PICTURE文字列が記号 "P", "S", "V", "9" だけを含んでいること。)詳細は、前述のPICTURE(形式)句節を参照。

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

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

    または COMPUTATIONAL-X

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

    または、サイズが1から8バイトの数字項目を定義するPICTURE文字列で記述しなければならない。サイズが 1, 2, 3, 4, 5, 6, 7, 8 バイトの数字項目の場合、これはそれぞれ2, 4, 7, 9, 12, 14, 16, 18 の小数点位置である整数項目を記述したことと同じである。

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

  5. BLANK WHEN ZERO句、JUSTIFIED句、SIGN句は、用途が明示的にも暗黙的にも DISPLAYでないデータ項目には指定してはならない。

  6. SYNCHRONIZED句およびVALUE句は、用途がINDEXのデータ項目に指定してはならない。

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

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

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

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

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

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

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

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

    ENTRY(導入)文のUSING句、

    組み込み関数の引数

    INVOKE文のUSING指定、行内メソッド呼出しの引数、

    INITIALIZE文、

    またはUSINGCALL(呼ぶ)文のGIVING句のみである。

  9. ポインタ

    または手続きポインタ

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

    INVOKE文、行内メソッド呼出しの引数リスト、関数の引数リスト

    のみである。

  10. USAGE IS INDEX、

    USAGE IS OBJECT、

    USAGE IS POINTER、

    またはUSAGE IS PROCEDURE-POINTER

    USAGE IS EVENT-POINTER、USAGE IS MONITOR-POINTER、USAGE IS MUTEX-POINTER、USAGE IS PROCEDURE-POINTER、USAGE IS SEMAPHORE-POINTER、またはUSAGE IS THREAD-POINTER

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

  11. 型定義名-1は、TYPEDEF句のレコードと同じ原始ファイル内で前に定義しなければならない。

  12. USAGE型定義名-1を指定した場合、以下の句は指定できない。

    • BLANK

    • JUSTIFIED

    • PICTURE

    • SIGN

    • SYNCHRONIZED

    • VALUE

  13. 同じ階層の高位レベルに明示的なUSAGE 句がある場合、USAGE 型定義名-1の指定はエラーとなる。

  14. USAGE 型定義名-1を指定した項目の直後に、従属する項目(78以外の高位レベル番号の項目)を記述した場合、エラーとなる。

  15. USAGE OBJECT REFERENCE句は、集団項目用のデータ記述項に指定してはならないが、従属する基本データ項目には指定してもよい。

  16. USAGE OBJECT REFERENCE句をファイル節に記述してはならない。

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


    注:オブジェクト参照がまだ、アクティブなオブジェクトを参照しているかどうかは、アプリケーションのロジックにより決まる。


  17. ACTIVE-CLASS指定は、ファクトリ定義、オブジェクト定義、メソッド定義にだけ記述できる。

  18. 用途がEVENT-POINTER のデータ項目は、CLOSE文、OPEN文、 SET文、WAIT文、またはUSING 指定でのみ、明示的に参照できる。

  19. 用途がMONITOR-POINTER、MUTEX-POINTER、またはSEMAPHORE-POINTERのデータ項目は、CLOSE文、OPEN文、 SET文、またはUSING指定でのみ、明示的に参照できる。

  20. 用途がTHREAD-POINTERのデータ項目は、START文、WAIT文、またはUSING指定でのみ、明示的に参照できる。

  21. 記述にUSAGE NATIONAL句を含む基本データ項目、または記述にUSAGE NATIONAL句を含む集団項目の下位にある基本データ項目は、各国語型または各国語型編集データ項目を記述するPICTURE文字列で宣言されなければならない。

  22. 基本データ項目、およびそれが属する集団のどれに対してもUSAGE句を指定しない場合は、以下が適用される。

    1. 明示的または暗黙的なPICTURE文字列が符号、'N'を含む場合、USAGE NATIONAL句が暗黙的に指定される。

    2. PICTURE文字列が符号、'N'を含まない場合は、USAGE DISPLAY句が暗黙的に指定される。

  23. OBJECT REFERENCE指定、POINTER指定、またはPROGRAM-POINTER指定を伴うUSAGE句は、レベル 1 の基本データ項目以外に指定してはならない。

    この制限は強制しない。

  24. プログラムプロトタイプ名-1を指定する場合、記述項の左辺にTYPEDEF句を指定しなければならない。

    この制限は強制しない。

  25. 明示的または暗黙的なPICTURE文字列が符号、'N'を含む基本データ項目に関連づけられたUSAGE句には、NATIONALを指定しなければならない。

  26. NET
    CONDITION-VALUE(条件値)指定を伴うUSAGE(用途)句は、レベル1を含む基本データ項目に対してのみ指定しなければならない。

  27. NET
    EVENT指定が指定された場合、クラス名-1は、デリゲート定義を参照すべきものとし、また、FACTORY指定は指定しないものとする。 

一般規則

  1. USAGE句を集団のレベルに書くと、そのUSAGE句はその集団項目に属するすべての基本項目に適用される。

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

  2. USAGE句は、計算機記憶内でのデータ項目の表現形式を指定する。USAGE句は、データ項目の使い方には影響を与えない。ただし、手続き部の文の中には、作用対象を特定のUSAGE句を伴う基本項目に限定するものがある。USAGE句は項目の基数または文字表現の種類に影響することがある。用途の形式については、COBOL言語の概念の章の文字表現と基数の選定節を参照。

  3. USAGE IS BINARY句は、計算機記憶内で数字項目を表現するのに基数 2 を使用することを定義する。USAGE IS BINARY句はUSAGE IS COMPUTATIONAL句と同義である。

  4. USAGE IS PACKED-DECIMAL句は、計算機記憶内で数字項目を表現するのに基数10 を使用することを定義する。またこの句は、各桁位置が計算機記憶内で最小限の構成を占めるように定義する。

    USAGE IS PACKED-DECIMAL句は、USAGE IS COMPUTATIONAL-3と同義語である。

  5. USAGE IS DISPLAY句は、計算機記憶内でデータ項目を表現するのに(明示的または暗示的に) 標準のデータ形式を使用することを定義する。データ項目は文字境界上で整列させられる。

  6. USAGE IS DISPLAY句は、下記の種類の項目に適用できる。

    • 英字

    • 英数字

    • 英数字編集

    • 数字編集

    • 外部浮動小数点数

    • 外部10進数(数字)

  7. USAGE IS INDEX句は、データ項目が指標データ項目であることを指定し、その値は表要素の出現回数と対応するものとする。

  8. MOVE(転記)文または入出力文の中で参照される集団の一部に指標データ項目、

    ポインタ・データ項目、

    手続きポインタ・データ項目

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

    ポインタ・データ項目、

    手続きポインタ・データ項目

    の変換は行われない。

  9. USAGE IS COMPUTATIONAL-4は、USAGE IS COMPUTATIONALと同義語である。

  10. USAGE IS POINTER句を指定すると、対象データ項目の番地を記憶できる。 (手続き部 - SEARCH - XML PARSEの章のSET(設定)文節を参照。)

  11. USAGE IS PROCEDURE-POINTER句は、データ項目が手続きの番地を記憶する手続きポインタ・データ項目であることを指定する。(手続き部 - SEARCH - XML PARSEの章のSET(設定)文節を参照。) 参照する対象の手続きはどんな言語で書いてあってもよい。COBOLの場合、それは入れ子になっていないポインタの手続き部を表わす。下記のどちらかによって識別する。

    • プログラム名段落のプログラム名

    • ENTRY(入口)文の入口名

  12. 型定義名-1を基本項目として指定した場合、「USAGE 型定義名-1」句は、型定義名-1によって参照されるプログラマによって定義された用途と同じ属性を、基本項目に指定することになる。

  13. 型定義名-1を集団項目として指定した場合、「USAGE 型定義名-1」句は同一の構造をした集団項目を指定する働きをする。その効果は、型定義名-1によって識別されるデータ記述項の下位に属する複数のデータ宣言が、「USAGE 型定義名-1」句で宣言された項目の下位に、まったく同様に指定されたかのようになる。下位のデータ項目のデータ名は、型定義名-1によって参照されるプログラマによって定義された構造体の中に宣言されているものと同じになる。それらを一意に参照するには、データ名の修飾を行う。.

  14. USAGE OBJECT REFERENCE句を用いて記述したデータ項目をオブジェクト参照と呼ぶ。オブジェクト参照は字類がオブジェクトであり項類がオブジェクト参照であるデータ項目である。オブジェクト参照の内容はオブジェクトの参照先または空である。ただし、下記の規則に従う。

    1. オブジェクト参照データ項目に割り当てられる記憶領域のサイズは4バイトである。

    2. 選択指定を何も書かないと、そのデータ項目は一般的オブジェクト参照となる。その内容は任意のオブジェクトの参照先であってよい。

    3. インターフェイス名-1を指定した場合、そのデータ項目によって参照されるオブジェクトは、インターフェイス名-1によって参照されるインターフェイスに適合しなければならない。

    4. クラス名-1を指定した場合、そのデータ項目によって参照されるオブジェクトはクラス名-1のオブジェクトであるかまたはクラス名-1のサブクラスでなければならない。ただし、下記の規則に従う。

      1. ONLY指定を書かなかった場合:

        1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ・オブジェクトまたはサブクラスでなければならない。

        2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトまたはサブクラスでなければならない。

      2. ONLY指定を書いた場合:

        1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのファクトリ・オブジェクトでなければならない。

        2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、指定したクラスのオブジェクトでなければならない。

    5. ACTIVE-CLASS指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、そのオブジェクト参照が指定されているメソッドを呼び出すのに使用されたオブジェクトが属するクラスのオブジェクトでなければならない。

      1. FACTORY指定を書いた場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのファクトリ・オブジェクトでなければならない。

      2. FACTORY指定を書かなかった場合、そのデータ項目によって参照されるオブジェクトは、そのクラスのオブジェクトでなければならない。

  15. USAGE IS EVENT-POINTER句は、ソフトウェアイベントの発生を知らせる桁詰めデータ項目を識別する。イベントデータ項目の値は、TRUE またはFALSEである。

  16. USAGE IS MONITOR-POINTER句は、モニタと呼ばれる桁詰めデータ項目を識別する。このデータ項目について、読み込みロック、表示ロック、書き込みロックを要求することができる。


    注:モニタは通常、複数のスレッドが読み込みまたは書き込みを行う可能性のあるデータ構造を保護するために使用される。


  17. USAGE IS MUTEX-POINTER句は、ミューテックスと呼ばれる桁詰めデータ項目を識別する。このデータ項目を使用して、マルチスレッドアプリケーションの重要な節を保護することができる。ミューテックスデータ項目の値は、ONまたはOFFである。ON状態のミューテックスデータ項目を持つことができるのは、一度に1つのスレッドのみである。

  18. USAGE IS SEMAPHORE-POINTER句は、数を数える桁詰めデータ項目を識別する。このデータ項目はマイナスの値を持つことはない。

  19. USAGE IS THREAD-POINTER句は、スレッドのハンドルを保管するデータ項目を識別する。

  20. 明示的または暗黙的なUSAGE IS NATIONAL句は、各国語符号化文字で計算機内に保管され、文字境界に並べられたデータ項目を識別する。各国語文字は、計算機の記憶域で同じ大きさの文字として表示される。各国語型データ(UNICODE)について詳しくは、COBOLシステムのマニュアルを参照。

  21. 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が含まれる。

    用途 同等のPICTURE文字列
    BINARY-CHAR [S]9(2)
    BINARY-SHORT [S]9(4)
    BINARY-LONG [S]9(9)
    BINARY-DOUBLE [S] 9(18)

  22. USAGE IS FLOAT-SHORT句は、USAGE IS COMPUTATIONAL-1の指定と同じである。

  23. USAGE IS FLOAT-LONG句は、USAGE IS COMPUTATIONAL-2の指定と同じである。

  24. USAGE PROGRAM-POINTER句を指定するデータ記述項は、手続きポインタデータ項目を指定する。このデータ項目は、プログラムポインタおよび手続きポインタとも呼ばれ、プログラムの位置を含む。(手続き部 - SEARCH - XML PARSEの章のSET(設定)文節を参照。) 手続きは、どの言語で書かれていてもよい。COBOLで書かれている場合は、プログラムの手続き部を表す。これは入れ子になっておらず、以下のいずれかで識別される。

    • プログラム名段落のプログラム名

    • ENTRY文の記述項名

  25. プログラムプロトタイプ名-1を指定する場合は、 このデータ項目は制限されたプログラムポインタとなる。制限されたプログラムポインタは、定義済みの位置、NULLまたは、指定されたプログラムプロトタイプ名で識別されたものと同じシグニチャのプログラムの位置のみを含む。

  26. NET
    USAGE IS CONDITION-VALUE句は、TRUEまたはFALSEの値を持つことのできるブール・データ項目を指定する。 CONDITION-VALUE(条件値)ブール・データ項目は、.NETフレームワークSystem.Boolean型上にマッピングされるので、この用途を伴うデータ項目は、System.Booleanパラメータを受け入れるメソッドに渡すことができる。

    NET 注:

    サンプル・プログラムを見るには、.NETとともにNet Expressを起動させ、Core.Netソリューションを開くこと。それらは、.NET\Examples\LRM Samples\Core.NETフォルダー内のNet Expressの中にある。

  27. NET
    USAGE IS OBJECT REFERENCE クラス名指定の中で指定されたクラス名が値型の場合は、コンパイラ警告が出される。この項目は、値型として扱われることになる、つまり、いかなるリファレンスも生成されない。

  28. NET
    USAGE ISクラス名句は以下のごとく指定する: 
    • クラス名が参照型を参照する場合、これはUSAGE OBJECT REFERENCEクラス名-1とまったく同等である。当該データ項目は、ヒープ上で割り当てられた.NETオブジェクトへのリファレンスまたは値NULLを意味する。

    • クラス名が値型を参照する場合、この句は、.NET値型であるデータ項目を指定する。

  29. NET
    EVENT指定が指定された場合は、その二つのメソッドであるadd_ChangeEventおよびremove_ChangeEventが自動的に生成される。これらのメソッドを用いて、それぞれ、新しいメソッドをデリゲートの中にフックし、あとでそれを除くことができる。