前ページへ 手続き部 - ACCEPT - DIVIDE 手続き部 - MERGE - OPEN 次ページへ

第13章: 手続き部 - ENTER - INVOKE

13.1 COBOLの文

13.1.1 ENTER(導入)文

ENTER(導入)文は、 同じプログラム内で2つ以上の言語を使用できるようにする。

ENTER文は、ANSI'85標準では廃要素に分類されており、ANSI標準の次回の全面改訂の際に、削除される予定である。

このCOBOLに組み込まれているすべての方言では、この構文は注記としての役割を果たすだけである。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、この動詞は明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内では、この文を使用するべきではない。

一般形式

構文規則

  1. 言語名および手順名には、任意の利用者語または英数字定数を書くことができる。

一般規則

  1. この文は、注記としての役割を果たすだけである。他の言語を実際に呼び出すには、CALL文を使用する。

13.1.2 ENTRY(入口)文

ENTRY(入口)文は、呼ばれたCOBOLプログラムへの代替の入口点を設定する。

一般形式

書き方 1

書き方 2

指令

  1. 予約語リストにフラグを付けたり修正したりするコンパイラ指令に加えて、下記の指令によって、この項に記述した構文または意味が影響を受ける可能性がある。

構文規則

すべての書き方
  1. 他のプログラム内に入れ子になっているプログラム内では、ENTRY文を使用できない。

  2. 定数-1は数字であってはならず、表意定数であってもならない。環境によっては、先頭の8文字だけが有効なものがある。

書き方 1
  1. 書き方1はプログラム定義中にのみ指定できる。

  2. データ名-1は連絡節、 ファイル節、 作業場所節 のいずれかに、レベルが01または77の項目として定義されていなければならない。

  3. データ名-2は連絡節、ファイル節、作業場所節のいずれかに、レベルが01または77の項目として定義されていなければならない。データ名-2は字類は何であってもよいが、長さが8バイトを超えてはならない。

書き方 2
  1. 書き方2を使用できるのは、プログラム名段落にEXTERNAL句が指定されているプログラム、つまり呼び出しプロトタイプ、の中だけである。

  2. データ名-1とデータ名-2は連絡節内の01レベルのレコードとして定義されていなければならない。

  3. 型定義名-1、型定義名-2、型定義名-3は、同じソース・ファイル中にTYPEDEF句を用いて、プログラマによって用途が定義されたものとして、予め定義されていなければならない。

一般規則

すべての書き方
  1. 定数-1の内容は入口名を表す。それはプログラムへの入口点を指しており、手続き部の開始時点での省略時のCOBOL入口点の代りの入口点となる。プログラム名段落中のプログラム名は省略時のCOBOL入口点を示すと考えられる。

    実行用のCOBOLのコードが収められているプログラム・ファイルの名前は通常、基本的にプログラム名と同じであることに注意すること。呼出しが行われたときにプログラム名または入口名がまだメモリーにロードされていないと、ファイル名に基づいてプログラム・ファイルが探されるが、プログラム名に基づいて探されているように見える。そのような状況において、プログラム名を参照する呼出しは正常に行われるが、入口名を参照する呼出しはエラーとなる可能性がある。

    入口名は多くの場合にプログラム名に等しく、両者は名前の形成に関する共通の規則に従う。その規則は「プログラム名段落と入れ子になった原始プログラム」の項に記載されている。定数-1はプログラム名段落の一般形式の定数-1に対応する。

  2. 定数-1に入口名を指定したCALL文を使用して呼ぶプログラムから呼ばれるプログラムを呼び出すと、ENTRY文の後ろの次の実行可能な文に制御が移される。

  3. 連絡節に宣言されているがENTRY文のUSING指定に宣言されていないデータ項目を参照できるのは、SET文を実行してそれらのデータ項目をあるデータ項目にリンクしてある場合、またはコンパイラ指令のSTICKY-LINKAGEが指定されている場合だけである。

  4. USING指定には最大で62個のデータ名を指定できる。

  5. BY REFERENCE指定とBY VALUE指定は共に、別のBY REFERENCE指定またはBY VALUE指定が出てくるまで、後続のパラメータに効力を及ぼす。最初のパラメータの前にBY REFERENCE指定もBY VALUE指定もない場合には、BY REFERENCE指定があるものとみなされる。
書き方 1
  1. データ名-1がファイル節または作業場所節の中のレベルが01または77の項目として定義されている場合、オブジェクト・プログラム動作は下記のようになる。具体的には、データ名-1と同じ内容で連絡節内にデータ項目が宣言され、呼ばれるプログラム中の最初の文を実行する前にそのデータ項目の内容がデータ名-1に転記するかのように動作する。初期プログラムでは、それらの値はそのプログラムの作業場所節のデータを初期化するさいに上書きされるので、呼ばれたプログラムからは利用できない。

  2. 稼働しているランタイム要素がCOBOLである場合、下記の規則が適用される。稼働しているランタイム要素がCOBOLでない場合、どういうときにBY REFERENCE指定またはBY VALUE指定を使用する必要があるかの詳細については、インターフェイスに関するCOBOLシステム・ドキュメンテーションを参照。

  3. USING指定はプログラムで使用される仮パラメータまたはプログラムに渡される任意の引数を指す。プログラムに渡された引数は、稼働しているソース要素によって、CALL文のUSING指定を用いて識別される。2つの名前リストの間の対応関係は、位置に基づいて確立される。

  4. 引数が内容によって渡される場合、呼ばれるプログラムの動作は下記のようになる。具体的には、呼出しを開始するプロセスの間に呼ぶランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出すランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。この割り当てられたレコードの長さは引数とちょうど同じ文字数である。その引数がその割り当てられたレコードに何も変換せずに転記される。その後で、そのレコードは呼ばれたプログラムによって、それは引数であり参照によって渡されたかのように処理される。

  5. 引数が参照によって渡された場合、仮パラメータが引数と同じ記憶領域を占めるかのように、呼ばれるプログラムは動作する。

  6. 引数が値によって渡される場合には、呼ばれるパラメータの動作は下記のようになる。具体的には、呼出しを開始するプロセスの間に呼ぶランタイム要素によって連絡節内のレコードが割り当てられ、そのレコードは呼び出すランタイム要素中の引数と同じ記憶領域を占めることはないかのように動作する。この割り当てられたレコードの長さは引数とちょうど同じ文字数である。その引数がその割り当てられたレコードに何も変換せずに転記される。その後で、そのレコードは呼ばれたプログラムによって、それは引数であり参照によって渡されたかのように処理される。

  7. 稼働している要素においては常に、データ名-1、 データ名-2および データ名-3への参照は連絡節中の記述に基づいて解明される。その連絡節中のデータ項目に定義されている文字数が、稼働している要素中の対応するデータ項目よりも多いと、結果はどのようになるか分からない。この規則に外れるか、具体的なランタイム環境において許されるシステム領域の最大許容サイズを超えるかすると、システムは壊滅的な障害を起こす可能性がある。

  8. プログラムが呼ばれ、USING指定中のBY REFERENCEの作用対象が呼ぶプログラム中のパラメータに対応する場合、参照のリンクが確立される。そのリンクは制御が呼んだプログラムに戻されるまで持続する。その後、そのプログラムを取り消すことなく、再びそのプログラムを呼んだ場合、同じBY REFERENCEの作用対象が呼んだプログラムのパラメータに対応しなかったならば、その作用対象を参照してはならない。ただし、コンパイラ指令のSTICKY-LINKAGEを指定した場合は別である。

  9. USING指定を書いた場合、いかなるCD項目中にもINITIAL句があってはならない。(『言語リファレンス - 追加トピック』中の「通信」の章の「通信記述 - 項目の完全な枠組み」を参照。)

13.1.3 EVALUATE(評価)文

EVALUATE(評価)文は、 多くの分岐点や 合流点がある構造を記述しておいて、 複数の条件を評価できるようにする。 その評価の結果によって、実行時要素のその後の動きが決まってくる。

一般形式

構文規則

  1. EVALUATE文の最初の WHEN指定の前に現れる作用対象または語TRUEとFALSEを、個別には 選択の左辺といい、総称して選択の左辺の組という。

  2. EVALUATE文の最初のWHEN指定の中に現れる作用対象または語TRUEとFALSEとANYを、個別には 選択の右辺といい、総称して選択の右辺の組という。

  3. THROUGHとTHRUは同義である。

  4. THROUGH指定によってつないだ2つの作用対象は、同じ字類のものにする。このようにTHROUGH指定によってつないだ2つの作用対象は、単一の選択の右辺を構成する。

  5. 選択の右辺の組に含まれる選択の右辺の数は、選択の左辺の数と等しくする。

  6. 選択の右辺の組に含まれる各選択の右辺は、選択の左辺の組に含まれる同じ順番の位置にある選択の左辺と対応させる。これには、下記の規則が適用される。

    1. 選択の右辺の中に現れる一意名、定数、算術式は、選択の左辺中の対応する作用対象と比較する作用対象として、有効なものにする。(前述の比較条件の節を参照。)

    2. 選択の右辺として現れる条件-1、条件-2あるいは語TRUEまたはFALSEは選択の左辺の組の中の条件式または語TRUEまたはFLASEと対応させる。

    3. 語ANYは、任意の種類の選択の左辺と対応できる。

    4. 一意名を使えるところでは、浮動小数点数データ項目を参照できる。

    5. 数字定数を使えるところでは、浮動小数点数定数を参照できる。

    6. 一意名を使えるところでは、ポインタ・データ項目を参照できる。

  7. 選択の右辺として部分式-1または部分式-2を指定する場合、これらは一意名か定数か算術式である選択の左辺と対応させる。部分式-1および部分式-2は一連のCOBOLの語であり、対応する選択の左辺の後ろに続けたときに、有効な条件式となるものでなければならない。

一般規則

  1. EVALUATE文を実行すると、まず、選択の左辺と選択の右辺が評価されて、1つの数値、1つの文字値、数値の範囲、文字値の範囲、真理値のどれかが割り当てられる。これらの値は下記のように決定される。

    1. 一意名-1および一意名-2によって指定される選択の左辺、および一意名-3および一意名-5によって指定される右辺のうちで、NOT指定またはTHROUGH指定を伴わないものは、その一意名によって参照されるデータ項目の値と字類を割り当てられる。

    2. 定数-1および定数-2によって指定される選択の左辺、および定数-3および定数-5によって指定される右辺のうちでNOT指定もTHROUGH指定も伴わないものは、その定数の値と字類を割り当てられる。定数-3と定数-5が表意定数のZEROであると、それらには対応する選択の左辺の字類が割り当てられる。

    3. 算術式として式-1および式-2を指定された選択の左辺、および算術式-1または算術式-3が含まれるNOT指定もTHROUGH指定も伴わない選択の右辺は、算術式の評価規則に従って数値を割り当てられる。(前述の算術式の節を参照。)

    4. 条件式として式-1および式-2を指定された選択の左辺、および条件-1と条件-2を指定された選択の右辺は、条件式の評価規則に従って真理値を割り当てられる。(前述の条件式の節を参照。)

    5. 語TRUEまたはFALSEを指定された選択の左辺または選択の右辺は、真理値を割り当てられる。語"true" が指定された項目は、真理値の「真」を割り当てられ、語"false" が指定された項目は、真理値の「偽」を割り当てられる。

    6. 語ANYを指定された選択の右辺は、それ以上評価されない。

    7. 選択の右辺にNOT指定を付けずにTHROUGH指定を書くと、選択の左辺と比較したときの値の範囲は、比較の規則に基づいて、最初の作用対象以上で2番目の作用対象以下となる。(前述の比較条件の節を参照。) 最初の作用対象の方が2番目の作用対象よりも大きいと、その範囲には値は何も含まれない。

    8. 選択の対象にNOT指定を書くと、割り当てられる値は、その値と等しくないすべての値、またはNOT指定を指定しなかった場合に割り当てられる値以外のものとなる。

  2. EVALUATE文の実行は、選択の左辺と選択の右辺の比較へと進む。そして、選択の左辺の組の中にWHEN指定を満たすものがあるかどうかが判定される。この比較は下記のように行われる。

    1. 最初のWHEN指定の選択の右辺の組の中の各選択の右辺が、選択の左辺の組の中の順序位置が同じ選択の左辺と比較される。

      1. 比較対象の項目に割り当てられている値が数値、文字値、数値の範囲、文字値の範囲である場合は、選択の右辺に割り当てられている値または値の範囲内のどれかの値が、比較規則に照らして選択の左辺に割り当てられている値と等しければ、その比較条件は満足される。(前述の比較条件の節を参照。)
      2. 比較対象の項目に割り当てられている値が真理値である場合は、選択の左辺と選択の右辺に同じ真理値が割り当てられているときに、その比較条件は満足される。
      3. 比較対象の項目に割り当てられている値が語ANYである場合は、その比較条件はつねに満足される。この場合は、選択の左辺の値は何であってもよい。

    2. 比較対象の選択の右辺の組に含まれる各選択の右辺に関して、上記の比較が満足されると、その選択の右辺の組が含まれるWHEN指定が選択の左辺の組を満たすものの1つとして選択される。

    3. 比較対象の選択の右辺の組に含まれる選択の右辺の中に、上記の比較が満足しないものがいくつかあると、その選択の右辺の組は選択の左辺の組を満たさない。

    4. 後続の選択の右辺の組に対して、上記の比較処理が、原始要素の記述されている順序で繰り返し実行される。そして、選択の左辺の組を満たすWHEN指定が選択されるか、またはすべての選択の右辺の組を比較し尽くした時点で、この処理は終わる。

  3. 比較処理が終わると、EVALUATE文の実行は下記のように進む。

    1. WHEN指定が選択された場合、そのWHEN指定の後ろに続く最初の無条件文-1に処理は進む。

    2. WHEN指定が選択されなかった場合、WHEN OTHER指定が指定されていれば、無条件文-2に処理は進む。

    3. EVALUATE文の実行は、選択されたWHEN指定またはWHEN OTHER指定の最後まで到達した時、あるいは選択されたWHEN指定がなくWHEN OTHER指定が指定されていない時に終了する。(COBOL言語の概念の章の明示範囲符と暗黙範囲符の節を参照。)

  4. 選択の右辺が部分式-1または部分式-2によって指定されている場合、対応する選択の左辺は語TRUEであるものとみなされる。選択の右辺はそれぞれ条件-1または条件-2とみなされる。ここで、条件-1または条件-2はそれぞれ、元の対応する選択の左辺-1または選択の左辺-2に続く部分式-1または部分式-2から導出される条件式である。

13.1.4 EXAMINE(検査)文

EXAMINE(検査)文は、データ項目中に現れる指定された文字を置き換えたり、数を数えたりする。

一般形式

書き方 1

書き方 2

構文規則

すべての書き方
  1. 一意名は、明示的または暗黙的に、USAGE IS DISPLAYと記述しておく。

  2. 各定数は、1文字で構成させる。一意名が数字項目である場合、定数は数字定数、値が単一の数字である文字定数、表意定数のZEROのどれかとする。一意名の字類がそれ以外の場合は、定数は数字でも文字でも語ALL以外の任意の表意定数であってもよい。

一般規則

すべての書き方
  1. 検査は、下記のように行われる。

    1. 文字データ項目に関しては、検査は左端の文字から開始され、右方向に進められる。一意名に指定したデータ項目中の各文字が、順々に検査される。

    2. EXAMINE文の対象とするデータ項目が数字の場合は、演算符号が付いてもよい。検査は符号を除く左端の文字から開始され、右方向に進められる。符号を除く各文字が順々に検査される。符号はどこに付いていても、EXAMINE文によって完全に無視される。

  2. The T TALLYINGオプションを指定すると、数が数えられて、 TALLYと呼ばれる特殊レジスタの値が置き換えられる。 この数は、下記の事柄を表わす。

    1. UNTIL FIRSTオプションを指定した場合は、最初に定数-1が見つかるまでに出て来る定数-1以外の文字の数。

    2. ALLオプションを指定した場合は、定数-1が出て来る数。

    3. LEADINGオプションを指定した場合は、最初に定数-1以外の文字が見つかるまでに出て来る定数-1の数。

  3. REPLACINGオプションを指定した場合は、下記の規則に基づいて置き換えが行われる。

    1. ALLオプションを指定すると、出て来る定数-1はすべて定数-2に置き換えられる。

    2. LEADINGオプションを指定すると、定数-1以外の文字が出て来るか、データ項目の右端に達したときに、定数-2による置き換えが終了される。

    3. FIRSTオプションを指定すると、最初に出て来る定数-1が定数-2に置き換えられる。

    4. UNTIL FIRSTオプションを指定すると、定数-1が出て来るか、データ項目の右端に達したときに、定数-2による置き換えが終了される。

13.1.5 EXEC(UTE)(実行)文

The EXEC(UTE)(実行)文は、COBOL以外のサブシステムに制御を渡すための連絡機構として設けられている。

一般形式

構文規則

  1. テキスト・データは、文字列END-EXECを含まなければ、どんなテキスト的データであってもよい。

一般規則

  1. この文は、「CALL " テキスト名" USINGテキスト・データ・バッファ」文に翻訳される。 (前述のCALL文の節を参照。) ここで、テキスト・データ・バッファにはEXEC文のすべてのテキスト・データが入れられ(空白は圧縮される)、これが呼ばれるプログラムである 「テキスト名」によってさらに解析される。

    このことは、呼ばれる副プログラム(テキスト名)に、テキスト文字列が渡されることを意味する。このテキスト文字列は、動詞EXEC(UTE)で始まりEND-EXEC指定で終わる間のすべてのCOBOL文が含まれる。呼ばれるプログラムは、渡されるすべての情報を解析して処理しなければならない。

    テキスト・データ内に一意名が含まれている場合、これは副プログラムに渡される一意名を表わしているのであって、データの値を表わしているのではない。

  2. 特例のEXEC SQLは通常はコンパイラによって違った扱いをされる。EXEC SQL文もここに記述されているのと同様に取り扱いたい場合は、コンパイラ指令のNOSQLを必ず明示的に設定しなければならない。

13.1.6 EXHIBIT(参照)文

EXHIBIT(参照)文は、指定された定数や一意名の内容を表示する。条件付きで表示させることもできる。一意名の場合は、内容の前に名前を表示させることができる。

一般形式

構文規則

  1. EXHIBIT文中に指定した各一意名は、どんな字類のデータであってもよい。 RETURN-CODEだけである。

  2. CHANGEDとNAMEDは、両方とも省略できる。

一般規則

  1. EXHIBIT文によって表示される定数および一意名は、表示行上では1つの空白によって区切られる。

  2. 定数には、ALL以外の表意定数を指定できる。

  3. 定数に数字を指定する場合は、符号の付かない整数とする。

  4. EXHIBIT NAMED文を実行すると、指定した各一意名または定数が表示される。一意名の場合は、その名前(修飾語および添字があれば、それを含む)の後に"=" (等号)を付けて、その後ろに現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。

  5. EXHIBIT CHANGED NAMED文を実行すると、指定した各一意名または定数が表示される。一意名の場合は、その名前(修飾語および添字があれば、それを含む)の後に"=" (等号)を付けて、その後ろに現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。ただし、表示される一意名(名前と値)は、前回このEXHIBIT文を実行した後で値に変更があったものだけである。値が変更されなかった一意名については、その名前も値も表示されない。値が変更された一意名が1つもなく、定数も1つも指定されていないと、何も表示されない(空白行の表示は抑制される)。

  6. EXHIBIT CHANGED文を実行すると、指定した各一意名または定数の現在の値が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。ただし、表示される値は、前回このEXHIBIT文を実行した後で値に変更があったものだけである。値が変更されなかった一意名については、その値は表示せず、代わりに空白が挿入される。値が変更された一意名が1つもなく、定数も1つも指定されていないと、空白行が表示される(空白行の表示は抑制されない)。

  7. CHANGEDオプションもNAMEDオプションも指定せずにEXHIBIT文を実行すると、指定した各一意名または定数が表示される。表示される一意名または定数は、EXHIBIT文に指定された順番に、1行に並べられる。

13.1.7 EXIT(出口)文

EXIT(出口)文は、一連の手続きの共通の 終了点を設ける。

EXIT文は、内PERFORM、段落、節の出口とすることもできる。

EXIT PROGRAM文は、呼ばれたプログラムの論理的な終点を示す。

任意の言語で書かれた呼び出し元の実行時要素に、値を返することもできる。

EXIT METHOD文は、起動されたメソッドの論理的な終点を示す。

一般形式

書き方 1

書き方 2

書き方 3

書き方 4

書き方 5

構文規則

書き方 1
  1. EXIT文は、それだけで完結文を構成しなければならない。

    この規則は強制しない。

  2. EXIT文は、段落中の唯一の完結文でなければならない。

    この規則は強制しない。

書き方 2
  1. 書き方2のEXIT文は、内PERFORMの中だけで使用できる。

書き方 4
  1. 完結文内の一連の無条件文の中にEXIT PROGRAM文を指定する場合、これをその最後の文としなければならない。

    この規則は強制しない。

  2. EXIT PROGRAM文を含める段落には、それ以外の完結文を含めてはならない。

    この規則は強制しない。

  3. 定数-1は、整数とする。

  4. GIVING指定とRETURNING指定は同義である。

  5. ADDRESS OF句を指定しなかった場合、一意名-1のサイズは8バイトを超えてはならない。
書き方 5
  1. EXIT METHOD文を指定できるのは、メソッド手続き部の中だけである。

書き方 4 および 5
  1. 関連するUSE文中にGLOBAL指定が書かれている宣言手続中にEXIT文を指定してはならない。

一般規則

書き方 1
  1. EXIT文は、手続き部中のある点に、利用者が手続き名を付けられるようにするだけである。 この書き方のEXIT文には、翻訳および実行に関して、それ以外の働きはない。
書き方 2
  1. CYCLE指定を伴わないEXIT PERFORM文を実行すると、最も近い内PERFORM文に対応するEND-PERFORMのすぐ後ろに続く、暗黙のCONTINUE文に制御が移される。

  2. CYCLE指定を伴うEXIT PERFORM文を実行すると、最も近い内PERFORM文に対応するEND-PERFORMの直前にある、暗黙のCONTINUE文に制御が移される。

書き方 3
  1. PARAGRAPH指定を伴う書き方3のEXIT文を実行すると、段落の最後の文の直前にある、暗黙のCONTINUE文に制御が移される。

  2. SECTION指定を伴う書き方3のEXIT文を実行すると、節の最後の段落にある最後の文の直前にある、暗黙のCONTINUE文に制御が移される。

書き方 4
  1. a 呼んだランタイム要素の制御下にないプログラム内でEXIT PORGRAM文を実行すると、次の実行可能な文に制御が移されて、処理が続行される。

  2. 初期属性を持たない呼ばれたプログラム内でEXIT PROGRAM文を実行すると、呼んだランタイム要素の中のCALL文の次の実行可能な文に制御が移されて、処理が続行される。呼んだランタイム要素の状態はCALL文を実行したときと同じである。ただし、呼んだランタイム要素と呼ばれたランタイム要素の間で共有されるデータ項目およびデータ・ファイルの内容は変更されている可能性がある。呼ばれたプログラムの状態も変更されない。ただし、呼ばれたプログラムによって実行されたすべてのPERFORM文は、その範囲の末尾に達したものとみなされる。

  3. 初期属性をもつ呼ばれたプログラム内でEXIT PROGRAMを実行することは、上記の7の処理に加えて、そのプログラムを対象とするCANCEL文を実行することに等しい。ただし、メモリーの解放は行われない。(この章で前述のCANCEL文を参照。)

  4. GLOBAL句が指定されている宣言手続きが実行されている最中に、EXIT PROGRAM文を実行してはならない。ただし、その宣言手続きの実行中に呼ばれたプログラム内で、EXIT PROGRAM文を実行することは構わない。

  5. 呼んだランタイム要素の制御下にあるプログラム内のEXIT PROGRAM文を実行すると、システム領域に戻り値が設定される。このシステム領域は一般にCOBOL以外のプログラムが値を返すために利用できる。そのサイズは4バイトを下回ることはなく、環境によってはそれよりも大きいことがある。

    GIVING指定を書かず、呼出し方式に特殊レジスタのRETURN-CODE(前出の「特殊名段落」中の「呼出し方式」を参照)を更新するように指定した場合、オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がCOBOLの数字データ項目であり、それにUSAGE COPM-5が指定されていて、そのサイズはCOBOLシステムの外の操作環境によって決定されるものとして宣言されている状態で、RETURN-CODEを送出し側としシステム領域を受取り側として、MOVE文を実行したかのように動作する。(RETURN-CODEの詳細については、「COBOL言語の概念」の章の「特殊レジスタ」の項を参照。)

    GIVING ADDRESS OF指定を書いた場合、オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がUSAGE POINTERと指定されたCOBOLのデータ項目として宣言され、「ADDRESS OF 一意名-9」を最初の作用対象としシステム領域を2番目の作用対象として、SET文を実行したかのように動作する。システム領域よりも大きな値を間接的に渡すために、ADDRESS OF指定を使用できる。

    「GIVING 一意名-1」指定を書いた場合、一意名-1はシステム領域に戻り値を収めるのに必要な長さがあり、その型と用途は呼んだランタイム要素によって期待されるのものでなければならない。一意名-1を送出し側項目とし、システム領域を受取り側項目として、MOVE文を実行したかのように、オブジェクト・プログラムは動作する。

    「GIVING 整数-1」指定を書いた場合、整数-1の値はシステム領域に保持可能なよりも大きくてはならない。オブジェクト・プログラム動作は下記のようになる。具体的には、システム領域がCOBOLの数字データ項目であり、それにUSAGE COPM-5が指定されていて、そのサイズはCOBOLシステムの外の操作環境によって決定されるものとして宣言されている状態で、整数-1を送出し側としシステム領域を受取り側として、MOVE文を実行したかのように動作する。

書き方 5
  1. EXIT METHOD文を実行すると、実行中のメソッドが停止され、呼出し元の文に制御が戻される。呼出し元のメソッド定義にRETURNING指定があると、RETRUNING指定によって参照されたデータ項目中の値がそのメソッド呼出しの結果となる。

13.1.8 GOBACK(復帰)文

GOBACK(復帰)文は、呼ばれたプログラムの論理的な終点を示す。

任意の言語で書かれている呼び出し元の実行時要素またはオペレーティングシステム環境へ、値を返すこともできる。

一般形式

構文規則

  1. GOBACK文は、一連の無条件文の最後の文とする。

    この規則は強制されないが、その場合GOBACKの後ろに続く文は実行されない。

  2. GIVING 指定とRETURNING指定は同義である。

  3. ADDRESS OF句を指定しない場合、一意名-1によって参照されるデータ項目のサイズは8バイトを超えてはならない。

  4. 定数-1は、整数とする。

一般規則

  1. 呼び出したランタイム要素の制御下にあるプログラム内でGOBACK文を実行した場合、GOBACK文と同じ句が指定されているEXIT PROGRAM文を実行したかのように、オブジェクト・プログラムは動作する。「EXIT文」の項を参照。

  2. 呼び出した ランタイム要素の制御下にないプログラム内でADDRESS OF句を指定せずにGOBACK文を実行した場合、GOBACK文と同じ句が指定されているSTOP RUN文を実行したかのように、オブジェクト・プログラムは動作する。

  3. 呼び出した ランタイム要素の制御下にないプログラム内でADDRESS OF句を指定してGOBACK文を実行した場合、STOP RUN文を実行したかのように、オブジェクト・プログラムは動作する。ただし、システム領域に設定される戻り値は不定であることが異なる。GOBACK文を使用する方が、同内容のEXIT PROGRAM文やSTOP RUN文よりも、コードが簡潔になることが多い。

  4. GLOBAL句が指定されている宣言手続きが実行されている最中に、GOBACK文を実行してはならない。ただし、その宣言手続きを実行中に呼ばれたプログラム内でGOBACK文を実行することはかまわない。

13.1.9 GO TO(飛越し)文

GO TO(飛越し)文は、手続き部のある部分から別の部分へ制御を移転させる。

書き方1のGO TO文中の手続き名-1を省略することは、ANSI'85標準では廃棄要素に分類されており、ANSI標準の次回の全面改訂の際に削除される予定である。

この構文は、Micro Focus COBOL に組み込まれているすべての方言で全面的に使用できる。FLAGSTD指令を使用すると、この構文が使われているすべての箇所を見つけ出すことができる。

標準COBOL定義の一部を構成するにもかかわらず、X/OpenのCOBOL言語定義では、書き方1で手続き名を省略することは明示的に除外されている。したがって、X/OpenのCOBOLに準拠する原始プログラム内ではこの文を使用するべきではない。

一般形式

書き方 1

書き方 2

構文規則

すべての書き方
  1. 一意名は、整数をとる数字基本項目の名前である。

  2. ALTER(変更)文によって参照される段落は、段落の見出しとその後ろに書いた書き方1のGO TO文だけで構成しなければならない。
書き方 1
  1. 手続き名-1を伴わない書き方1のGO TO文は、単一の文からなる段落内にだけ書ける。

    この規則は強制しない。

  2. 完結文の中の一連の無条件文の1つとして、書き方1のGO TO文を使用する場合は、その最後の文とする。
書き方 2
  1. 書き方2では、少なくとも2つの手続き名を書く必要がある。

    書き方2で、手続き名が1つだけであってもよい。

一般規則

すべての書き方
  1. 書き方1で手続き名-1を指定しない場合は、このGO TO文を参照するALTER文を、このGO TO文の実行に先立って実行しておく。

    このGO TO文を実行する前に、このGO TO文が含まれる段階を参照するALTERが実行されていない場合には、このGO TO文はCONTINUE(継続)文と同じに扱われる。

書き方 1
  1. 書き方1のGO TO文が実行されると、制御は手続き名-1に移される。ただし、ALTER文によってそのGO TO文が変更されている場合には、変更された手続き名に制御が移される。
書き方 2
  1. 書き方2のGO TO文が実行されると、一意名の値が1, 2, ... nのどれであるかに応じて、手続き名-1、手続き名-2などに制御が移される。一意名の値が正または符号の付かない1, 2, ... nでない場合は、制御の移転は行われず、通常の実行順序の次の文が実行される。

13.1.10 IF(判断)文

条件式 の節を参照。) その結果が「真」であったか「偽」であったかによって、実行時要素の以降の制御の流れが変わってくる。

一般形式

構文規則

  1. 文-1と文-2は、無条件文または条件文を表わす。条件文の前に無条件文を書いてもよい。

  2. END-IF指定を書く場合、 NEXT SENTENCE指定を書いてはならない。

    END-IF指定と共に、NEXT SENTECE指定を書いてもよい。

    NEXT SENTENCE指定が実行されると、制御はEND-IFの次の文ではなく、後続の最も近い終止符(.)の後ろに続く文に移される。

一般規則

  1. IF文の範囲は、下記のどれかによって区切られる。

    1. 同じ入れ子レベルのEND-IF指定

    2. 分離符の終止符

    3. 入れ子になっている場合、上位レベルのIF文に対応するELSE指定

  2. IF文が実行されると、下記の制御の移転が発生する。

    1. 条件が真のとき、文-1を指定してある場合は、その文が実行される。文-1に手続き分岐文または条件文が含まれると、その文の規則に従って明示的に制御が移転される。文-1に手続き分岐文または条件文が含まれないと、ELSE指定は指定してあっても無視されて、IF文の末尾に制御が移される。

    2. 条件が真のとき、文-1の代わりにNEXT SENTENCE指定を指定してある場合は、ELSE指定は指定してあっても無視されて、次の実行可能文に制御が移される。

    3. 条件が偽のとき、文-1またはその代わりのNEXT SENTENCE指定は無視され、文-2が指定してあればそれが実行される。文-2に手続き分岐文または条件文が含まれると、その文の規則に従って明示的に制御が移転される。文-2に手続き分岐文または条件文が含まれないと、IF文の末尾に制御が移される。ELSE文-2指定を指定してないと、文-1は無視されて、IF文の末尾に制御が移される。

    4. 条件が偽のとき、ELSE NEXT SENTENCE指定を指定してある場合は、文-1は指定してあっても無視されて、次の実行可能文に制御が移される。

  3. 文-1または文-2のどちらか一方または両方に、IF文を含めてもよい。この場合、IF文は入れ子になっている、という。

    IF文の中に含まれるIF文は、左から右方向に、IFとELSEとEND-IFの順に組になったものとみなされる。したがって、文中に出てくるELSEは、まだ他のELSEと組み合わされていないか、または明示的にも暗示的にも終了していない、最も近い先行するIFと組み合わされる。文中に出てくるEND-IFは、明示的にも暗示的にも終了していない、最も先行するIFと組み合わされる。

13.1.11 INITIALIZE(初期化)文

INITIALIZE(初期化)文は、データ項目の種類を選択して、その値を予め定義されている値に設定できるようにする。たとえば、数字データの値をゼロに設定し、 英数字データの値を空白に設定する。

一般形式

構文規則

  1. 定数-1および一意名-2によって参照されるデータ項目は、送出し側項目を表わす。一意名-1によって参照されるデータ項目は、受取り側項目を表わす。

  2. REPLACING指定内に記述する各項類は、対応する一意名-2によって参照されるデータ項目または定数-1を送出し側として使用した場合の、MOVE(転記)文の受取り側作用対象として許されるものにする。(前述のMOVE文を参照。)

  3. REPLACING指定内では、同じ項類は繰り返し指定できない。

  4. 一意名-1によって参照されるデータ項目またはその下位に属するデータ項目のデータ記述には、OCCURS句のDEPENDING指定が含まれていてはならない。

    一意名-1によって参照されるデータ項目の位置が可変であってはならない。つまり、同じレコード記述内にあってOCCURS句のDEPENDING指定があるデータ項目の後ろに、一意名-1を置くことはできない。ただし、OCCURS句のある項目の下位に一意名-1が属する場合は別である。

    一意名-1によって参照されるデータ項目は、位置が可変であってもよい。

  5. 指標データ項目は、INITIALIZE文の作用対象には指定できない。

  6. 一意名-1によって参照されるデータ項目のデータ記述項に、RENAMES句を含めてはならない。

  7. 数字の一意名または定数を指定できるところでは、どこでも浮動小数点数のデータ項目または定数を使用できる。

  8. NATIONALおよび NATIONAL-EDITEDフィールドは国別文字の値によってのみ初期化できる。

一般規則

  1. 語REPLACINGの後ろに続く必要語は、このマニュアル中に定義したデータの項類を表わす。(COBOL言語の概念の章のデータの字類の概念を参照。)

  2. 一意名-1によって参照されるデータ項目が基本項目であっても集団項目であっても、すべての初期化処理は、受取り側項目を基本項目とするMOVE文を1つずつ書いたように実行される。その際、下記の規則が適用される。

    REPLACING指定を書くと、下記のようになる。

    1. 一意名-1が集団項目を指すならば、その下位に属する基本項目のうちで、REPLACING指定に指定した項類に属するものだけが初期化される。

    2. 一意名-1が基本項目を指すならば、それがREPLACING指定に指定した項類に属する場合にだけ初期化される。

    この初期化処理は、一意名-2によって参照されるデータ項目または定数-1を送出し側とし、一意名-1によって参照されるデータ項目受取り側として、暗黙のMOVE文を実行する形で行われる。

    受取り側のすべての基本項目が、すべて初期化の対象となる。それには、表のすべての要素も含まれる。 ただし、下記の一般規則3と4は例外とする。

  3. 指標データ項目と

    ポインタ・データ項目

    と基本FILLERデータ項目は、INITIALIZE文の対象とならない。

  4. 受取り側項目の下位に属しかつREDEFINES句が含まれる項目、またはそのような項目の下位に属する項目は、どちらも初期化の対象から外される。ただし、受取り側の一意名自体にはREDEFINES句が含まれていてもよいし、REDEFINES句が含まれるデータ項目の下位に一意名が属していてもよい。

  5. REPLACING指定を付けずにINITIALIZE文を実行すると、英字、英数字、英数字編集の項類に属するデータ項目は空白に初期化され、数字、

    外部浮動小数点数、

    数字編集の項類に属するデータ項目はゼロに初期化される。

    国別および国別編集の項類に属するデータ項目は国別編集の空白に初期化される。

    この場合、影響を受ける各データ項目は、移送元の定数(つまり、空白またはゼロ)が指定された基本MOVE文の受取り領域であるかのように、処理が行われる。

  6. すべての場合において、一意名-1によって参照されるデータ項目の内容は、INITIALIZE文に書かれている順番(左から右)に、初期化される。その過程で集団項目が出てきた場合には、その集団の中で記述されている順に、基本項目が初期化される。

  7. 一意名-1と一意名-2が同じ記憶領域を指す場合には、INITIALIZE文の実行結果はどうなるかわからない。両者が同じデータ記述項に定義されていたとしても、そのことは変わらない。(前述の作用対象の重なり を参照。)

  8. NATIONAL項目およびNATIONAL-EDITED項目は、国別文字の値で初期化できる。

13.1.12 INSPECT(文字列検査)文

INSPECT(文字列検査)文は、データ項目内に出てくる単一の文字または一連の文字の数を数えたり(書き方1)、置き換えたり(書き方2)、数を数えて置き換えたり(書き方3)、 

変換したり(書き方4)する。

  1. INSPECT TALLYING、REPLACING、CONVERTING の使用例は、言語リファレンス - 追加トピックを参照。

一般形式

書き方 1

書き方 2

書き方 3

書き方 4

構文規則

すべての書き方
  1. 一意名-1は、集団項目、あるいは明示的または暗黙的にUSAGE IS DISPLAYと記述された基本項目とする。

  2. 一意名-3から一意名-n までの一意名は、

    集団項目、あるいは

    明示的または暗黙的にUSAGE IS DISPLAYと記述された、英字か英数字か

    英数字編集か、数字編集か、

    数字の基本項目とする。

  3. 各定数は、文字定数または表意定数とする。ただし、表意定数のALLは使用できない。定数-1、定数-2、定数-4が表意定数のときは、暗黙的に1文字のデータ項目を表わす。

  4. 次の各指定には、 BEFORE 指定、

    および/

    または AFTER指定を2つ以上書くことはできない。 ALL、LEADING、 CHARACTERS、FIRST

    または CONVERTING

    指定。

  5. 定数-1、定数-2、定数-3、定数-4、定数-5および一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の長さは、定数またはデータ項目が取る限度内ならば、何文字でもよい。

  6. 一意名-2(TALLYING項目)を除くすべての一意名は、外部浮動小数点数であってもよい。英数字項目を参照するINSPECT文に関しては、外部浮動小数点項目は英数字に再定義されているように扱われる。
書き方 1 および 3
  1. 一意名-2は、基本数字データ項目とする。

書き方 2 および 3
  1. 定数-3または一意名-5のデータの大きさは、定数-1または一意名-3のデータの大きさと等しくする。定数-3に表意定数を指定すると、その大きさは、定数-1または一意名-3のデータ項目の大きさに等しく扱われる。

  2. CHARACTERS指定を行う場合、定数-3または一意名-5のデータ項目の大きさは1文字にする。

    定数-2および一意名-4には、この制限は適用されない。

書き方 4
  1. 定数-5または一意名-7のデータの大きさは、定数-4または一意名-6のデータの大きさと等しくする。定数-5に表意定数を指定すると、その大きさは、定数-4または一意名-6のデータ項目の大きさに等しく扱われる。

  2. 定数-4または一意名-6のデータ項目中に、同じ文字が2回以上現れてはならない。

一般規則

すべての書き方
  1. 長さを判定する目的では、一意名-1は送出し側データ項目であるかのように扱われる。(前述のOCCURS句を参照。)

  2. 文字列検査を行うためには、比較の周期、BEFORE指定やAFTER指定の範囲の設定、計数または置換の機構などが必要である。これらの設定を含めて、文字列検査は一意名-1のデータ項目の左端の文字位置から開始され、左から右へ、右端の文字位置に達するまで進められる。この文字列検査の進め方には、字類による違いはない。具体的には、下記の一般規則11、12、13に説明する。

  3. INSPECT文の中で使用するデータ項目の一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7の内容は、下記のように扱われる。

    1. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが英数字と記述されているならば、これらの各一意名の内容は文字列として扱われる。

    2. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが英数字編集か数字編集か符号なし数字項目と記述されているならば、これらの各一意名は英数字に再定義されているように扱われる。 (一般規則3aを参照。)INSPECT文は、再定義されたデータ項目を参照するように書かれる。

    3. 一意名-1、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のどれかが符号付き数字と記述されているならば、データ項目は符号部分を除いたその符号付き数字項目と長さの等しい符号なし数字項目に転記されたように扱われる。そして、その結果に対して上記の一般規則3bが適用される。(後述するMOVE文の節を参照。)

  4. 一般規則6から19において、定数-1、定数-2、定数-3、定数-4、定数-5に関する規則は、それぞれ、一意名-3、一意名-4、一意名-5、一意名-6、一意名-7のデータ項目の内容にも同様に当てはまる。

  5. 一意名の中に添字付きのもの

    または関数一意名

    があると、その添字

    または関数一意名

    は、INSPECT文の実行の最初に1回だけ評価される。

書き方 1
  1. 一意名-1は、送出し側データ項目である。

  2. 必要語のALLとLEADINGは、後続の各定数-1にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。

  3. 一意名-2のデータ項目の内容は、INSPECT文を実行することによって初期化されることはない。

  4. 計数に関する規則は、下記のとおり。

    1. ALL指定を書くと、一意名-1の中に定数-1が出現する回数が一意名-2に加えられる。

    2. LEADING指定を書くと、一意名-1の中に定数-1が最初に出現して以降連続して出現する回数が一意名-2に加えられる。ただし、一意名-1の中に定数-1が最初に出現する場所は、定数-1が比較の対象となる最初の比較周期が始まる点とする。

    3. CHARACTERS指定を書くと、一意名-1の中にその文字が出現する回数が一意名-2に加えられる。その数え方は書き方1 および2の一般規則12eに従う。

  5. 一意名-1、一意名-3、一意名-4のどれかが一意名-2と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。(前述の作用対象の重なりの節を参照。)

書き方 1 および 2
  1. 一意名-1のデータ項目の内容を文字列検査する間、その中に定数-1が出現するたびに、計数(書き方1の場合)または定数-3による置換(書き方2の場合)が行われる。

  2. 計数または置換するために定数-1の出現を調べる比較は、下記のように行われる。

    1. TALLYING指定または REPLACING指定の作用対象は、INSPECT文中に書かれた順に左から右に取り上げられる。一意名-1のデータ項目の左端の文字位置から開始して、最初の定数-1が、一意名-1中の等しい文字数と比較される。 両者を1文字ずつ比較した結果が等しく、さらに下記の条件のどれかを満たす場合、定数-1と一意名-1中の該当部分とは等しいと判定される。

      1. LEADING指定もFIRST指定も書かれていない。

      2. 定数-1に形容詞LEADINGがかかっている場合、一般規則9および15に照らして、定数-1は先頭に現れている。

      3. 定数-1に形容詞FIRSTがかかっている場合、一般規則9に照らして、定数-1は最初に現れている。

    2. 最初の定数-1が一意名-1中の比較対象部分と一致しないと、後続の定数-1が存在すれば、そのそれぞれについて比較が繰り返される。この比較は、両者が一致するか、後続の定数-1がなくなるまで続けられる。後続の定数-1がない場合には、一意名-1のデータ項目の文字位置のうちで、前回の比較周期で取り上げられた部分のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1との比較が繰り返される。

    3. 比較結果が一致すると、一般規則9と15に説明してあるように、計数と置換のどちらか一方または両方が行われる。すると今度は、一意名-1のデータ項目中の現在比較の対象となった部分の右端の文字位置のすぐ右隣の部分が、次回の比較周期での比較対象部分として取り上げられる。そして、最初の定数-1との比較が繰り返される。

    4. この比較処理は、一意名-1のデータ項目中の右端の文字位置が比較の対象として取り上げられるか、または比較部分の左端の文字位置とみなされるまで続けられる。この状態に達すると、文字列検査は終了する。

    5. CHARACTERS指定を書くと、定数-1に文字を1つ暗黙に指定したものとして、上記の12aから12dに記述した比較処理が行われる。ただし、一意名-1のデータ項目の内容との比較は実際には行われない。この場合、暗黙の定数-1は現在の比較周期において、一意名-1のデータ項目の内容の比較対象部分の左端文字位置とつねに一致するものとみなされる。

  3. 一般規則12に定義した比較処理は、BEFORE指定およびAFTER指定の影響を受ける。その様子は下記のとおり。

    1. BEFORE指定もAFTER指定も書かないと、定数-1またはCHARACTERS指定の暗黙の作用対象が一意名-1と比較される開始点は、一意名-1の左端の文字位置からとなる。

    2. BEFORE指定を書くと、定数-1またはCHARACTERS指定の暗黙の作用対象と比較される一意名-1のデータ項目の内容の範囲は、その左端の文字位置から定数-2が最初に出現するまで(定数-2を含まない)となる。

      定数-2が最初に出現する位置は、一般規則12に記述した比較処理の最初の周期が始まる前に判定される。どれかの比較周期において、定数-1またはCHARACTERS指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1のデータ項目の内容と一致しないものとみなされる。一意名-1のデータ項目の中に定数-2が出てこなかった場合は、定数-1またはCHARACTERS指定の暗黙の作用対象は、BEFORE指定がなかったのと同様に比較処理の対象とされる。

    3. AFTER指定を書くと、定数-1またはCHARACTERS指定の暗黙の作用対象と比較される一意名-1のデータ項目の内容の範囲は、最初に出現する定数-2の右端のすぐ右の文字位置から末尾までとなる。

      定数-2が最初に出現する位置は、一般規則12に記述した比較処理の最初の周期が始まる前に判定される。どれかの比較周期において、定数-1またはCHARACTERS指定の暗黙の作用対象が比較の対象とならない場合は、一意名-1のデータ項目の内容と一致しないものとみなされる。一意名-2のデータ項目の中に定数-2が出てこなかった場合は、定数-1またはCHARACTERS指定の暗黙の作用対象は、まったく比較処理の対象とならない。

書き方 2
  1. 必要語のALLとLEADINGとFIRSTは、後続の各BY指定にかかる形容詞である。その効力の範囲は、次の形容詞が出てくるまでである。

  2. 置換に関する規則は、下記のとおり。

    1. CHARACTERS指定を書くと、一意名-1のデータ項目の中で書き方1と2の一般規則12eに照らして一致する各文字が、定数-3で置き換えられる。

    2. ALL指定を書くと、一意名-1のデータ項目の中の定数-1に一致する各文字が、定数-3で置き換えられる。

    3. LEADING指定を書くと、一意名-1のデータ項目の中の定数-1に一致する最初以降の連続する各文字が、定数-3で置き換えられる。ただし、一意名-1の中に定数-1が最初に出現する場所は、定数-1が比較の対象となる最初の比較周期が始まる点とする。

    4. FIRST指定を書くと、一意名-1のデータ項目の中の定数-1に一致する左端の文字が、定数-3で置き換えられる。

  3. 一意名-3、一意名-4、一意名-5のどれかが一意名-1と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。(前述の作用対象の重なりの節を参照。)

書き方 3
  1. 書き方3のINSPECT文は、同じ一意名-1に対して、書き方1のTALLYING指定と書き方2のREPLACING指定を2つ続けて書いたものとして解釈され実行される。書き方1のINSPECT文の比較照合と計数に関する一般規則、および書き方2のINSPECT文の比較照合と置換に関する一般規則が、書き方3にも当てはまる。

書き方 4
  1. 書き方4のINSPECT文は、定数-4に含まれる各文字に関して1つずつ、同じ一意名-1に対してALL指定をした、書き方2のINSPECT文を続けて書いたものとして解釈され実行される。これらのALL指定をした個々の仮想のINSPECT文は、定数-1の代わりに定数-4を、定数-3の代わりに定数-5を用いたものと解釈される。定数-4の文字と定数-5の文字との対応関係は、データ項目内の順序位置によって付けられる。

  2. 一意名-4、一意名-6、一意名-7のどれかが一意名-1と同じ記憶領域を占めると、INSPECT文の実行結果はどうなるかわからない。たとえそれらのデータ項目が同じデータ記述項に記述されたものであっても、そのことは変わらない。

13.1.13 INVOKE(メソッド呼出し)文

INVOKE文はメソッドを呼び出す働きをする。

一般形式

構文規則

  1. オブジェクト一意名-1はオブジェクト参照またはクラス名でなければならない。

  2. 一意名-1は4バイトのデータ項目でなければならない。

  3. 定数-1は英数字の定数でなければならない。

  4. 定数-1も定数-2も表意定数であってはならない。

  5. オブジェクト一意名-1が一般的オブジェクト参照を参照する場合、BY CONTENT指定もBY VALUE指定も書いてはならない。また、BY REFERENCE指定を書かなくとも、暗黙的に指定されているものとみなされる。

    BY CONTENT指定およびBY VALUE指定を書ける。

  6. 一意名-2は英数字のデータ項目として定義しなければならない。

  7. 一意名-2を指定した場合、オブジェクト一意名-1は一般的オブジェクト参照でなければならない。

    一般的オブジェクト参照であるために、オブジェクト一意名-1は必須ではない。

  8. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではない場合、「パラメータおよび返却する項目の準拠規則」に指定されている規則が当てはまる。

  9. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではなく、引数にBY CONTENT指定またはBY REFERENCE指定がある場合、手続き部の見出し中の対応する仮パラメータにBY REFERENCE指定がなければならない。

  10. 一意名-3は、ファイル節、作業場所節、 オブジェクト記憶節、 局所記憶節、連絡節、通信節のいずれかに定義されているデータ項目を参照しなければならない。

  11. 一意名-4、一意名-5、 一意名-6、一意名-7、 一意名-8の いずれも、関数一意名であってはならない。

  12. 引数にBY VALUEを指定した場合、手続き部の見出し中の対応する仮パラメータにBY VALUE指定がなければならない。

  13. 整数-1は符合付きでもゼロでもよい。

  14. GIVINGとRETURNINGは同等である。

  15. 一意名-9はサイズが8バイト以内のデータ項目であり、ファイル節、作業場所節、 オブジェクト記憶節、 局所記憶節、連絡節、通信節のいずれかに定義されていなければならない。

  16. 一意名-10は連絡節にレベル番号が01または77のデータ項目として定義されていなければならない。

  17. 一意名-1によって参照されるデータ項目が一般的オブジェクト参照ではない場合、「パラメータおよび返却する項目の準拠規則」に指定されている規則が当てはまる。

  18. 一意名-3は送出し側と受取り側の両方の作用対象である。

  19. 一意名-1、一意名-2、一意名-4、一意名-5、一意名-6、一意名-7、一意名-8は送出し側の作用対象である。

  20. 一意名-9と一意名-10は受取り側の作用対象である。

一般規則

  1. INVOKE文を実行するプログラムまたはメソッドのインスタンスは起動力のあるランタイム要素である。

  2. オブジェクト一意名-1または 一意名-1はオブジェクト・インスタンスを指す。オブジェクト一意名-1をクラス名として指定した場合は、そのクラス名のファクトリ・オブジェクトを指す。定数-1、または一意名-2によって参照されるデータ項目の内容は、そのオブジェクト・インスタンスに対して作用するそのオブジェクトのメソッドを指す。
    1. 呼び出す対象のメソッドがCOBOLのメソッドである場合、定数-1、または一意名-2によって参照されるデータ項目の内容は、呼出し対象のメソッドのメソッド名段落に指定されている名前を指す。

    2. 呼び出す対象のメソッドがCOBOLのメソッドではない場合、メソッド名を構成する規則は関係するドメインによって異なる。

  3. AS指定を書くと、COBOLのデータ項目に対してメソッドを呼び出すことができる。テンプレート-1を指定すると、クラス・テンプレートとして使用される。テンプレートを作成することは、クラス・ライブラリ中のオブジェクトによって提供される機能である。(詳細については、『オブジェクトCOBOLを使用してのooプログラミング』を参照。)

  4. INVOKE文を実行すると、指定したメソッドが実行可能になり、呼び出されたメソッドに制御が移される。呼び出されたメソッドがCOBOLのメソッドである場合、「手続き部の見出し」に記述されている規則に従って、メソッドが実行される。そうでない場合には、メソッドが記述されている言語の作成者によって定義されている規則に従って、メソッドが実行される。メソッドから制御が戻されると、INVOKE文の最後に制御が移される。

  5. 呼び出されたメソッドを実行できるようにするさいに、その所在が把握されるまで、実行単位にはそれがCOBOLのメソッドであるか否かは分からない。メソッド名の形式からCOBOLのメソッドであるか否かを判定することはできない。

  6. メソッドの呼出しまたはメソッドの終了のプロセスによって、何らかの外部ファイル結合子に関連するファイルの状態または位置づけが変更されることはない。

  7. この処理系では、引数と連絡節内のデータ項目の間の同期を維持することはない。それはユーザーの責任である。

    注意: COBOL言語では、データ項目の番地の桁寄せに制約はない。他方、COBOL以外の言語では、通常は番地について前提があり、桁寄せされていないデータ項目が参照されると何らかのエラーを起こす。桁寄せは下記の措置のうちのいくつかを用いて実現される。

    • 集団項目に無名項目を追加する

    • ALIGNコンパイラ指令を使用するとともに、USING指定中の作用対象を01レベルまたは77レベルのデータ項目にする

    • SYNCHRONIZED句とIBMCOMPコンパイラ指令を併用する

    INVOKE文にRETURNING指定を書いた場合、COBOL以外のメソッドは適切な形式の結果を返さなければならない。

  8. INVOKE文のUSNIG指定の引数と呼び出されるメソッドの手続き部の見出しのUSING指定の中の対応する仮パラメータの順序によって、引数と仮パラメータの対応関係が決まる。この対応は位置で決まるのであって、名前が等しいことによるのではない。最初の引数が最初の仮パラメータに対応し、次にそれらの2番目同士が対応する、といったぐあいである。

    パラメータが指標名の場合は、そのような対応関係は確立されない。呼び出されたメソッドと呼び出すランタイム要素の指標名は常に別々の指標を参照する。

    起動されたランタイム要素上のUSING指定の効果については、「手続き部の見出し」の一般規則に記述されている。

  9. INVOKE文のUSNIG指定の中で参照されるパラメータの値は、INVOKE文が実行されたときに、呼び出されるメソッドで利用できるようになる。

  10. BY CONTENT、BY REFERENCE、BY VALUEの各指定はその後ろに続くパラメータに効力を及ぼすが、別のBY CONTENT、BY REFERENCEまたはBY VALUEの指定が出てきたところでその効力は停止する。

    最初のパラメータの前にBY CONTENT、BY REFERENCE、BY VALUEのどの指定もないと、BY REFERENCE指定があるものとみなされる。

  11. BY REFERENCE ADDRESS OF指定が明示的または暗黙的に指定されている場合、USAGE POINTERを用いてデータ項目が宣言され、「SET データ項目 TO ADDRESS OF 一意名-4」文によって取得された値がBY REFERENCEによってそのデータ項目に渡されたかのように、メソッドは動作する。

  12. .一意名-4が連絡節にあってそのレベル番号か01または77以外であるか、または作業場所節にある場合、そのデータ項目がBY CONTENTによって渡され、一意名-4の番地を呼び出されたメソッドによっては変更できないことに等しい。「BY REFERENCE 定数-2」を明示的または暗黙的に指定すると、メソッドは定数-2を定数-3のために記述されたものとして処理する。

  13. 「LENGTH OF 一意名-6」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-6に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  14. 整数-1を指定すると、引数の暗黙的なデータ記述は、符合付き数字項目でUSAGE COMP-5に等しくなる。その記憶領域内でのバイト数は、整数-2の指定があればその値によって示され、指定がなければ4バイトとなる。

  15. 「LENGTH OF 一意名-8」を指定すると、引数のデータ記述は、形式がPIC S9 (9) USAGE BINARYで内容が一意名-8に割り当てられた記憶領域のバイト数に設定されたものと等しくなる。

  16. 一意名-10を指定すると、呼び出されたメソッドは、明示的または暗黙的にUSAGE POINTERと指定された値を返す。メソッドの結果は、SET文の規則に従って、一意名-10に代入される。

  17. 呼び出されるメソッド中にINVOKE文が含まれていてもよい。呼び出されるメソッドは、呼び出すメソッドを直接的または間接的に呼び出すINVOKE文を実行できる。


Copyright © 1998-2001 MEARNT. All rights reserved.
本書、ならびに使用されている固有の商標と商品名は国際法によって保護されています。

次ページへ 手続き部 - ACCEPT - DIVIDE 手続き部 - MERGE - OPEN 次ページへ