手続き部では、制御が明示的に 移される場合や次の実行可能ステートメントがない場合を除けば、
プログラムの流れは、ステートメントが書かれている順序に従って、
あるステートメントから次のステートメントへと制御が移ります。
このような通常のプログラムの流れを、暗黙の 制御の移動と呼びます。
暗黙に行われる制御の移動は、
あるステートメントから次のステートメントへという場合の他に、
プロシージャーのブランチ・ステートメントを実行せずに、
通常のプログラムの流れが変更される場合にも生じることがあります。
次に示す例では、暗黙の 制御の移動で、
ステートメントからステートメントへの制御の移動が変更されます。
- 別の COBOL ステートメントの制御のもとで実行されているプロシージャーの最後のステートメントの実行が終わると、
制御は暗黙のうちに移されます。
(プロシージャーの実行を制御する COBOL ステートメントは、
例として、
MERGE、
PERFORM、
SORT、
および USE です。) さらに、
繰り返し実行を起こさせる PERFORM ステートメントの制御の下である段落が実行される場合で、
しかもその段落がその PERFORM ステートメントの範囲内の最初の段落である場合には、
その段落が繰り返し実行されるたびに、その PERFORM ステートメントに関連する制御メカニズムとその段落の最初のステートメントとの間で暗黙の制御の移動が行われます。
- SORT ステートメントまたは MERGE ステートメントを実行する間は、
入力または出力プロシージャーに制御が暗黙のうちに移されます。
- XML PARSE ステートメントの実行中は、制御が暗黙的に処理プロシージャーに移動します。
- 宣言型プロシージャーの実行を起こさせる COBOL ステートメントのいずれかを実行する間は、
その宣言型プロシージャーに制御が暗黙のうちに移されます。
- いずれかの宣言型プロシージャーの実行が終わると、
その宣言型プロシージャーの実行を引き起こしたステートメントに関連する制御メカニズムに制御が暗黙のうちに戻されます。
COBOL では、プロシージャー・ブランチ・ステートメント、プログラムの呼び出し、
あるいは条件ステートメントを実行することにより、
制御を 明示的に 移すこともできます。(ステートメントのカテゴリーに、
プロシージャー・ブランチ・ステートメントおよび条件ステートメントのリストがあります。)
定義: 次の実行可能ステートメント という言葉は、
上述の規則に従って制御が移されるという点で次の COBOL ステートメントを指します。以下の場合には、次の実行可能ステートメントは存在しません。
- そのプログラムに手続き部がない場合。
- 宣言セクションの最後のステートメントの後であり、
そのステートメントの含まれている段落が、
他のいずれの COBOL ステートメントの制御の下でも実行されない場合。
- プログラムまたはメソッドの最後のステートメントの後であり、
そのステートメントの含まれている段落が、
他のいずれの COBOL ステートメントの制御の下でも実行されない場合。
- 別のセクションで実行されるアクティブな PERFORM ステートメントの
範囲内にある、宣言セクションの
ステートメントの後であり、宣言セクションの最後のステートメントが、
アクティブな PERFORM ステートメントの出口であるプロシージャーの
最後のステートメントでない場合。
- COBOL プログラムの外に制御を移す STOP RUN ステートメント
または EXIT PROGRAM ステートメントの後である場合。
- COBOL プログラムの外に制御を移す GOBACK ステートメントの後である場合。
- COBOL メソッドの外に制御を移す EXIT METHOD ステートメントの後である場合。
- END PROGRAM マーカーまたは END METHOD マーカー。
次の実行可能ステートメントがなく、
しかも制御がその COBOL プログラムの外に移されないときは、
プログラムの実行が CALL ステートメントの制御の下にあるプログラムの非宣言型プロシージャー部分で行われており、
暗黙の EXIT PROGRAM ステートメントが実行される場合を除いて、
プログラムの制御のフローは予測できません。
同様に、制御がメソッドの手続き部の最後に到達し、
次の実行可能ステートメントがない場合は、
暗黙の EXIT METHOD ステートメントが実行されます。