【COBOL 読み2-11-3】PERFORM抜けとSTOP RUN〜係長の憂い

🧩今日の学び
PERFORM THRUは段落を順番に実行して呼び出し元へ戻る「一回きりの段落実行」
END-PERFORMはループ終了、EXIT PERFORMは途中脱出、STOP RUNはプログラム全体終了
・COBOLの制御構造は「どこまで終わらせるか」を常に意識して書く必要がある

係長)て、いいんだよそんなことは!

なるお)いや、疲れたって言い出したの係長ですって。なんで早退しましょ!ついでに飲みに行きましょ!昼飲みいきましょ!飲み代出してくれれば付き合いますよ!

係)だからいいんだよ!忘れろ!この瞬間に忘れろ!いいな!

な)そんな段落名なんでもいいからって、愛と恋の違いってなんですかって話ですよ。

係)しらねーよ!だから読めっての!

な)その読めって嫁とかけてます?

係)うるせー!早くやれ!

今日のコード

       PERFORM INIT-PARA THRU END-PARA
       STOP RUN.

       INIT-PARA.
           DISPLAY "Initializing..."
           MOVE 1 TO CNT.
       NEXT-PARA.
           PERFORM UNTIL CNT > 3
               DISPLAY "CNT = " CNT
               ADD 1 TO CNT
           END-PERFORM
           DISPLAY "Loop done."
       END-PARA.
           DISPLAY "Program finished."

な)ブーブー!

係)豚の真似はいいから、はよしろ!

な)なんてひどい…愛も何も無いっすよ…

係)どうでもいいから!

PERFORM THRUの流れ:段落を順番に実行するだけの命令

な)むー。

INIT-PARAからEND-PARAまで一つずつPERFORMを進めていく。

んでINIT-PARAからはじまって、Initializingを表示からのCNTに1入れる。

NEXT−PARAに進んで、CNTより大きくなるまでルーピング。
まずは、CNT=表示させてCNTに入っている数字を横に表示。そしてCNTプラス。
終わったらPERFORM UNTIL CNT > 3のループPERFORMから抜けて、Loop done.を表示する。

そして、END-PARA. に進んで、Program finished.を表示する。

これでどうっすか?

係)なんかイラッとする言い方だが、合格だ。

な)あのー

       PERFORM INIT-PARA THRU END-PARA
       STOP RUN.

ってなってますけど、なんでSTOP RUNになるんです?

PERFORMだからEND-PERFORMで終わるもんじゃないんですか?

なぜSTOP RUNなのか:PERFORMとプログラム終了の関係

係)やっと気づいたか。

PERFORMは「ほら、この段落を動かしてこい」って命令。
で、動かし終わったあとに、プログラム全体を止めるためにSTOP RUN.を書く。

もう少し詳しく言うとだ、COBOLのPERFORMには、大きく2種類ある。

段落呼び出し型(PERFORM THRU)

 「指定した段落たちを順番に実行して戻る」

  ループでも繰り返しでもない。1回きり

  終わったら呼び出し元(つまり STOP RUN の上)に戻る。

繰り返し型(PERFORM UNTIL / TIMES)

 「条件が満たされるまで、同じ処理をグルグル回す」

  この中ではEND-PERFORMが必要

つまり

PERFORM INIT-PARA THRU END-PARA  ← 段落呼び出し
 ↓
INIT-PARA. ~ END-PARA. の中を全部実行
 ↓
戻ってくる
 ↓
STOP RUN. ← プログラム終了

という流れになる。

終わり方は3種類:END-PERFORM/EXIT PERFORM/STOP RUN

な)うーん。

ルーピングとかの何度かPERFORMの中で何度か回すときはEND-PERFORMで抜けさせる必要がある。

回す必要がなければ、STOP RUNで終わらせる?

てか、この段階で終わらせる必要がなければ、STOP RUNは必要ないって感じっすよね。

ここにEXIT PERFORMの考え方が入ってくると…

うーん、読むのは別に困らないけど、書くときに悩ませるとか嫌な感じですね。

係)そうだな。
「読むのは分かるけど、書くとき悩む」——そこがCOBOLの真髄だ。

ここを整理しておくぞ。

今言ったように、PERFORMまわりってのは「終わり方が3種類」ある。

それぞれ“どのレベルで終わるか”が違うんだ。

終わり方対象意味どこに戻るか
END-PERFORMループこのPERFORMブロックを閉じるそのまま次の文へ進む
EXIT PERFORMループループの途中だけど抜けるPERFORMの外(次の文)へジャンプ
STOP RUNプログラム全体もう終わりどこにも戻らない(実行終了)

な)つまり、
STOP RUN → 終業ベル
END-PERFORM → 授業終了
EXIT PERFORM → せ、先生!漏れるからトイレいってきます!あ…

てな感じっすよねー。

おむすび

係)それ最後の例えを言いたかっただけだろ…ホント疲れた…

な)大丈夫ですか?

疲れたときはカレーもいいっすよ。辛!!とか言ってれば元気になりますって!憂いだらけも人生も晴らせますって!

係)誰のせいで、憂いだらけなんだよ…

係長のワンポイント

PERFORM THRUは「段落を順番に一度だけ実行して戻る」呼び出し型だ。
END-PERFORMはループ構文の中だけで使う“繰り返し終了の合図”。
段落呼び出しにはEND-PERFORMは存在せず戻った先で次の文が実行される。
プログラム自体を終わらせたいなら、そこで初めてSTOP RUNが必要だ。
PERFORMは処理の依頼STOP RUNは人生の終業ベル──役割は全く別だ。

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

この記事を書いた人

コメント

コメントする