【COBOL学習|初心者向け】GOBACK文でマスターするCOBOLプログラムの終了処理

1. 導入:なぜGOBACKが重要なのか

COBOLのプログラムを記述する際、処理を終えて「呼び出し元」に制御を戻す命令は不可欠です。かつてはEXIT PROGRAMやSTOP RUNといった命令が個別に使い分けられてきましたが、現在はGOBACK文を使うのが主流です。なぜなら、プログラムの階層構造(メインかサブか)を気にせず、常に「呼び出し元へ戻る」という一貫した動作を保証してくれるからです。バグを減らし、読みやすいコードを書くための必須知識です。

2. 基礎知識:GOBACKとは何か

COBOLにおいて、プログラムは階層構造を持つことがあります。メインプログラムがサブプログラムを呼び出し、さらにそのサブプログラムが別の処理を呼び出すといった形です。
GOBACKは、その名の通り「戻る」ための命令です。最大の特徴は、そのプログラムがメインであれサブであれ、「自分を呼び出した相手」に制御を確実に返す点にあります。また、システムへ「処理が正常だったか異常だったか」を伝えるための特殊レジスタRETURN-CODEの値を、OSに引き継ぐ役割も持っています。

3. 実装と解決策

GOBACKを使用する際は、プログラムの論理的な終了地点に記述します。
もし、プログラムが正常終了したことを呼び出し元に伝えたい場合は、GOBACKの直前に「MOVE 0 TO RETURN-CODE」を実行します。逆に、エラーが発生した場合は「MOVE 8 TO RETURN-CODE」のように、任意の値を設定してからGOBACKを呼び出すのが現場の定石です。

4. サンプルプログラム

以下のコードは、受け取った値が0以上なら正常終了、負の数ならエラーとして呼び出し元へ戻るプログラム例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE01.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT-VAL PIC S9(4) VALUE -1.

PROCEDURE DIVISION.

  • 値が0以上か判定する

IF WS-INPUT-VAL >= 0 THEN
DISPLAY “正常終了します。”
MOVE 0 TO RETURN-CODE
ELSE
DISPLAY “エラーのため異常終了します。”
MOVE 8 TO RETURN-CODE
END-IF.

  • ここで呼び出し元へ制御を戻す

GOBACK.

5. 応用・注意点

現場での注意点として、「EXIT PROGRAM」との混同が挙げられます。EXIT PROGRAMは、サブプログラムで使用した場合は戻りますが、メインプログラムで使用すると動作が環境依存になる場合があります。そのため、現代のCOBOL開発では例外なくGOBACKに統一するのが最も安全で「プロらしい」書き方です。
また、GOBACKを書き忘れると、プログラムが制御の終わりを見失い、予期せぬ挙動(暴走)を招くことがあります。処理の分岐が終わる場所には必ずGOBACKを配置する習慣をつけましょう。

コメント

タイトルとURLをコピーしました