制御の明示移行および暗黙移行

制御メカニズムのフローにおいて、制御は文が記述された順序で文から文に移行する。ただし、制御を明示的に移行してこの順序をオーバーライドする場合、または制御が移行する次の実行可能な文がない場合は例外とする。文から文への制御の移行は、手続き部で明示的な文を使用せずに行われるため、制御は暗黙移行される。

COBOL には、制御の暗黙移行メカニズムを明示的にも暗黙的にも変更する手段が用意されている。

制御の暗黙移行は、連続する文の間で行われるほか、手続き分岐文を実行せずに通常の制御の流れを変更する場合にも行われる。COBOL には、文から文への制御の流れをオーバーライドする暗黙的な制御フロー変更を行うために、次の方法が用意されている。

  1. 段落が別の COBOL 文 (PERFORM、USE、SORT、MERGE など) の制御下で実行されており、その段落が制御文の範囲内で最後の段落である場合、段落内の最後の文から最後に実行された制御文の制御メカニズムに制御が暗黙移行する。さらに、反復実行を行う PERFORM 文の制御下で段落が実行されており、その段落が PERFORM 文の範囲内で最初の段落である場合、PERFORM 文に関連付けられた制御メカニズムと、その段落の最初の文との間で、反復実行ごとに制御が暗黙移行する。
  2. SORT 文または MERGE 文を実行すると、関連する入力または出力手続きに制御が暗黙移行する。
  3. 任意の COBOL 文を実行すると宣言節が実行される場合、その宣言節に制御が暗黙移行する。
    注: 上記の項目 1. で説明したように、宣言節の実行後に別の制御の暗黙移行が行われる。
  4. MF 何らかのファイル操作 (OPEN および CLOSE を含む) を行った際に、そのファイルで FILE STATUS データ項目が宣言されておらず、USE 文も明示的に指定されていない場合、暗黙の USE 文によって例外処理が行われる。この暗黙の USE 手続きは、次の処理と同等である。
    USE AFTER ERROR PROCEDURE ON file-name. 
    IF status-key-1 >= 3
      DISPLAY error-message UPON CONSOLE 
      STOP RUN.

    エラー メッセージの定義については、COBOL システムのドキュメントを参照。

制御の明示移行とは、手続き分岐文、編集文、または条件文を実行することで、制御の暗黙移行のメカニズムを変更することをいう。文の間の制御の明示移行は、手続き分岐文または条件文を実行することによってのみ行われる。完結文の間の制御の明示移行は、IF 文の NEXT SENTENCE 句または SEARCH 文を実行することによってのみ行われる。

手続き分岐文の ALTER 文を実行すると、直接的に制御の明示移行を引き起こすわけではないが、関連する GO TO 文を実行する際の制御の明示移行に影響が及ぶ。手続き分岐文の EXIT PROGRAM 文は、呼び出し先のプログラム内で実行されると、制御の明示移行を行う。

「次の実行完結文」(next executable sentence) という用語は、上記の規則に従って制御の暗黙移行先となる次の COBOL 完結文か、NEXT SENTENCE を実行した結果、制御の明示移行先となる次の COBOL 完結文を指すために用いる。次の実行完結文は、現在の完結文を終了させる分離符の終止符の直後の完結文である。下記のように次の実行完結文がない場合、次の実行可能な文は存在しない。

「次の実行文」(next executable statement) という用語は、上記の規則および手続き部内の各言語要素に関連する規則に従って制御の移行先となる次の COBOL 文を指すために用いる。

以下の場合には、次の実行文は存在しない。