COBOLのSTOP RUNとGOBACKの違いを徹底解説!初心者でも理解できる終了処理の基本
生徒
「COBOLでプログラムの最後に使うSTOP RUNってなんですか?」
先生
「STOP RUNは、COBOLプログラムの実行を完全に終了させる命令なんですよ。」
生徒
「じゃあ、GOBACKっていうのも見たことがあるんですが、それはSTOP RUNと何が違うんですか?」
先生
「それでは、STOP RUNとGOBACKの違いを初心者にもわかりやすく説明していきましょう!」
1. STOP RUNとは?COBOLでプログラムを終了させる基本命令
COBOLのSTOP RUN文は、プログラムを完全に終了させるための命令です。
たとえば、ひとつのCOBOLプログラムを単独で実行しているとき、最後にこの命令を使うことで、そのプログラムの処理が終了します。
パソコンで言えば、「シャットダウンボタン」を押して電源を切るようなものです。処理が終わったら、そこでストップして、次の命令には進みません。
基本的な使い方はとてもシンプルです。
DISPLAY "プログラムを開始します。"
DISPLAY "処理を実行中です。"
STOP RUN
この例では、「プログラムを開始します。」→「処理を実行中です。」という表示のあと、STOP RUNが実行されると、そこでプログラムの動きが終わります。
2. GOBACKとは?呼び出し元に戻るためのCOBOL命令
GOBACK文は、STOP RUNに似ていますが、意味が少し違います。
GOBACKは、呼び出し元のプログラムに戻るための命令です。もしそのプログラムがほかのプログラムから呼び出されている場合、GOBACKを使うと元のプログラムに戻ります。
たとえば、「おつかいに行ってきて」と言われて用事が終わったあと、家に帰って報告するようなイメージです。
逆にSTOP RUNを使ってしまうと、おつかいから戻らず、そのまま帰ってこないのと同じになります。
GOBACKの使用例は以下のとおりです。
DISPLAY "このプログラムは別のプログラムから呼ばれています。"
GOBACK
このコードでは、呼び出し元に戻って処理が続くのがポイントです。
STOP RUNではなくGOBACKを使うことで、「戻ってくることを前提にした流れ」が作れます。
3. STOP RUNとGOBACKの違いを初心者向けに簡単に説明
ここで、STOP RUNとGOBACKの違いを、初心者にもわかりやすく、表にまとめてみましょう。
| 命令 | 意味 | 例え | どんなとき使う? |
|---|---|---|---|
STOP RUN |
プログラム全体の終了 | パソコンの電源を切る | 単体プログラムの終了時 |
GOBACK |
呼び出し元に戻る | おつかいから帰宅する | 呼び出されたプログラムから戻るとき |
このように、似ているようでまったく用途が異なる2つの命令です。
4. STOP RUNとGOBACKの使い分けを実際の例で体験
ここでは、STOP RUNとGOBACKの違いがよりはっきりわかるように、2つのプログラムを連携させて、使い分けの実例を見てみましょう。
プログラムA(メイン)からCALLでプログラムBを呼び出します。
▼ プログラムA(メイン)
CALL "PROGRAM-B"
DISPLAY "プログラムBから戻ってきました。"
STOP RUN
▼ プログラムB(サブ)
DISPLAY "プログラムBの処理を開始します。"
GOBACK
実行結果
プログラムBの処理を開始します。
プログラムBから戻ってきました。
このようにGOBACKを使うことで、プログラムBの処理が終わったあとにプログラムAに戻って、処理が続いています。
一方で、もしプログラムBの最後をSTOP RUNにしてしまうと、次のようになります。
▼ プログラムBの変更(STOP RUN版)
DISPLAY "プログラムBの処理を開始します。"
STOP RUN
実行結果
プログラムBの処理を開始します。
このように、プログラムAには戻らず、処理が強制終了してしまいます。呼び出し元の処理はスキップされるため、思った通りに動かない場合があります。
5. STOP RUNとGOBACKの選び方のコツ
COBOLを勉強している初心者の方にとって、STOP RUNとGOBACKの使い方は少し混乱するかもしれません。
でも大丈夫。次のように使い分けを覚えておきましょう。
- 単体で動くプログラムなら → STOP RUN
- 他のプログラムに呼ばれているなら → GOBACK
最初はわからなくても、何度もプログラムを書いていくうちに、自然と身についてきます。
まとめ
COBOLでのプログラム終了処理は、一見単純そうに見えて、実は場面によって正しく使い分ける必要があります。特に、STOP RUNとGOBACKの違いを理解することは、COBOLプログラムを正しく構築するうえでとても重要です。STOP RUNは文字通り、プログラムの実行を完全に終わらせる命令で、単体で動く処理にぴったりな方法です。一方、GOBACKは、呼び出し元に処理を戻すための命令で、複数のプログラムが連携して動くシステムにおいて大切な役割を果たします。
実務では、COBOLプログラムは単体で動くこともあれば、別のプログラムから呼び出されたり、他のサブルーチンを呼び出したりすることもあります。そのため、どちらを使うかの判断を誤ると、思わぬトラブルにつながる可能性があります。特に、GOBACKを使うべきところでSTOP RUNを使ってしまうと、呼び出し元に処理が戻らず、途中で実行が終わってしまい、大きな障害の原因になることもあります。
それぞれの命令には明確な特徴があります。STOP RUNは、プログラムを終了させて完全に制御を戻さないため、最後の処理としては安心して使えます。しかし、GOBACKは、処理が終わったあとも呼び出し元に戻り、続きの処理を行いたい場合に適しています。呼び出し関係があるかどうかをしっかり意識しておくことで、使い分けの判断がしやすくなります。
GOBACKとSTOP RUNを使った比較コード
次のサンプルは、GOBACKを使ってプログラムを呼び出し元へ返すパターンと、STOP RUNで処理を終了させてしまうパターンの違いを確認できる例です。
* プログラムA(メイン)
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
PROCEDURE DIVISION.
DISPLAY "プログラムBを呼び出します。"
CALL "SUB-PROG"
DISPLAY "プログラムBから戻りました。"
STOP RUN.
* プログラムB(サブ)
IDENTIFICATION DIVISION.
PROGRAM-ID. SUB-PROG.
PROCEDURE DIVISION.
DISPLAY "サブプログラムの処理です。"
GOBACK.
このように、GOBACKを使うことで、メインプログラムに処理が戻り、「プログラムBから戻りました。」という表示も行われます。STOP RUNに変えると、その表示はスキップされてしまいます。呼び出し元に戻る必要がある場合は、必ずGOBACKを使うようにしましょう。
こうした細かな違いが、COBOLのプログラムの安定性や信頼性を大きく左右します。初心者のうちはSTOP RUNばかりを使いがちですが、GOBACKの使いどころを覚えることで、より柔軟なプログラム設計ができるようになります。
生徒
「先生、STOP RUNとGOBACKって、どっちも終わる命令だと思ってました。でも違うんですね…!」
先生
「そうですね。STOP RUNはプログラムの完全終了、GOBACKは呼び出し元に戻る命令です。使い方を間違えると、想定通りに動かなくなってしまいますよ。」
生徒
「サブプログラムではGOBACKを使うようにすればいいんですね。もしSTOP RUNにしちゃうと、呼び出し元が無視されるんだ…」
先生
「その通りです。特に複数のプログラムを組み合わせるようなときは、GOBACKの役割がとても大切になります。」
生徒
「なんとなく書いていたけど、今度からは意識して使い分けできそうです!」
先生
「その調子です。小さな違いが大きな動作の差になるので、しっかり覚えておきましょうね。」