🧩今日の学び
・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-PARAにSTOP 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 は部屋の出口──間違えると家ごと吹き飛ぶぞ。

コメント