【COBOL 読み3-1-2】EXIT PERFORMと終了命令の境界線〜STOP RUNはどこの子?

🧩今日の学び
EXIT PARAGRAPHは「呼ばれた段落の仕事を終える」命令で、STOP RUNは「プログラム人生を終わらせる」命令
PERFORM中にSTOP RUNを書くと、呼び出し元の存在意義ごと消えるという層構造の理解が重要
・下位段落ではEXIT、最上位だけSTOP RUN――これがCOBOLの安全な流儀

今日のコード

       PROCEDURE DIVISION.
       MAIN-PARA.
           PERFORM LOOP-PARA
           DISPLAY "After loop"
           STOP RUN.

       LOOP-PARA.
           MOVE 1 TO CNT
           PERFORM UNTIL CNT > 5
               DISPLAY "CNT = " CNT
               IF CNT = 3
                   DISPLAY "Special point reached!"
                   EXIT PARAGRAPH
               END-IF
               ADD 1 TO CNT
           END-PERFORM
           DISPLAY "Loop done."

なるお)あれ?

LOOP-PARASTOP RUNとかいらないのかしら?

このバレーシューズを履いたが最後、あたしは踊り続けなければならないの。
みたいな?

係長)お、いい質問だな。バレーシューズの行はいらんが。

LOOP-PARAの中でSTOP RUNしなくていいの?」ってやつだ。

これ、現場でも最初にみんな悩むポイントだ。

結論から言うとLOOP-PARAには STOP RUNは書かない
というか——書いちゃダメなケースがほとんどだ。

STOP RUNとEXIT PARAGRAPH 何が違うの?

な)え、でもEXIT PARAGRAPHでメインに戻るなら、そのままSTOP RUNしても一緒じゃないっすか?

係)一見そう見えるけど、違うんだ。

COBOLの流れってのは、こういう“層構造”になってる。

PROGRAM(全体)
└── 段落(MAIN-PARA)
     └── 段落(LOOP-PARA)

PERFORM LOOP-PARA は、「LOOP-PARAを一時的に呼び出して、終わったら戻る」って命令だ。

EXIT PARAGRAPH

これは、 呼び出された段落(LOOP-PARA)から“抜けて戻る”。

STOP RUN

これは、プログラム全体を即終了
呼び出し元も問答無用で終わる。

な)つまりSTOP RUNは「上も下も全部止める」ってことすか

係)そう。

だからLOOP-PARA の中でSTOP RUNを書くと、MAIN-PARA に戻る前にプログラムごと落ちる。

結果的に「呼び出した意味」がなくなる。

まとめると

命令意味戻る場所
EXIT PARAGRAPH呼び出された段落を抜ける呼び出し元に戻る
STOP RUNプログラムを終了するどこにも戻らない

な)うわー、じゃあLOOP-PARA の中でSTOP RUNしたら、係長の話の途中で強制的に電話切るみたいなもんっすね。

おむすび

係)そうだ。

…で、お前、この間それをやってきたよな?電波がー電波が―って。

あの時、なにやってたんだ?

な)えーと、あれ、あれですよ!

ものすごく電波がわるかったんですよね。もうしょぼくて5Gどころか2Gになってたんで、もう1Gになるかとヒヤヒヤもんでしたよ。

ほんとダイアルアップ回線でしたよ、NTTでしたよ。
ホントスマホも困りもんですよね。ほんとジョブズにも困りもんですよね。
ホントヤフーでいいんですよ。ネットスケープでいいんですよ。

係)うるせーな。EXIT 戯言

な)俺のターン!PERFORM 係長

係)ほんともう帰れよ。

係長のワンポイント

EXIT PARAGRAPH は「呼ばれた段落の仕事を終えて、元の呼び出し元へ戻る」命令だ。
一方 STOP RUN は「今ここでプログラム人生を終わらせる」最終命令。
PERFORM の途中で STOP RUN を書くと、呼び出した側の存在意義が消える。
だから下位段落では“戻る命令”、最上位でだけ“終わる命令”を使う。
STOP RUN は玄関、EXIT PARAGRAPH は部屋の出口──間違えると家ごと吹き飛ぶぞ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする