研修で使い方を間違えたのでおさらいついでに記事化。
戻り文とは
プログラムを終了させたり、サブルーチンやサブセクションの呼び出し元に戻るための構文。
COBOLの戻り文は3種類
まずはざっくりと説明。
STOP RUN
プログラムを終了させるときに使う。そのため、サブセクションやサブプログラムで使ってしまうと、呼び出し元に戻ることなく、実行した時点で終了してしまう。
GOBACK
サブプログラムからメインプログラム(サブプログラムの呼び出し元)に戻るための構文。
EXIT
一連の手続きの共通の終了点で、PERFORM
、パラグラフ、セクションの出口としても利用可能。
使い方
STOP RUN
はプログラムを完全に終了させたいとき、GOBACK
はサブプログラムを終了してメインプログラムに戻りたいとき、EXIT
はサブセクションの呼び出し元に戻りたいときに使う。
*--メインプログラム
IDENTIFICATION DIVISION.
*
PROGRAM-ID. MAIN.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
*--メインセクション
MAIN-SEC SECTION.
MAIN-SEC-S.
CALL 'SUB-PGM'.
PERFORM SUB-SEC.
DISPLAY '!!!'.
MAIN-SEC-E.
STOP RUN.
*--サブセクション
SUB-SEC SECTION.
SUB-SEC-S.
DISPLAY 'WORLD'.
SUB-SEC-E.
EXIT.
*--サブプログラム
IDENTIFICATION DIVISION.
PROGRAM-ID. SUB-PGM.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
DISPLAY 'HELLO'.
GOBACK.
実行結果
HELLO
WORLD
!!!
上記のプログラムで誤った使い方を考えてみる。
1. サブプログラムのGOBACK
をSTOP RUN
に
実行結果
HELLO
STOP RUN.
は、プログラムを終了するもので、メインプログラムに戻ることなく、呼ばれた時点で完全に終了してしまう。言うまでもないが、サブセクションで呼べば、今回の場合だとWORLD
と!!!
が出ない。
2. サブセクションのEXIT.
をGOBACK.
に
実行結果
HELLO
WORLD
GOBACK.
はサブプログラムからメインプログラムに戻るための構文であり、メインプログラムで実行すると、これの前がないので、結局はSTOP RUN.
と同じ役目を果たす。なので、メインセクションに戻ることなく終了してしまう。