【COBOL 読み3-3】PERFORM(人間界)をEXITでノックアウト

🧩今日の学び
EXIT PERFORMは“ループだけ”抜け、段落先頭には戻らない動作である点を理解。
・抜けた瞬間のCNT SUMの値がそのまま後続処理へ流れる、係長の核心アドバイスを再確認。
・次回は「段落・セクションが重なる時のPERFORM制御」に進み、COBOL中級者の壁を突破へ。

なるお)係長、もっとどんどん教えてくださいよ!

係長)なんだ?いきなりやる気だして。

な)いや、今日見たんですよ、係長がボッコボコにされてるのを。

係)はぁ!?どこだよそれ。人違いだろう?

な)えーでもちゃんと夢でしたよー

係)あのな⋯ちゃんと夢ってなんだよ…

な)いやだから!係長多分あのあとボコボコにし返ししたんだろうなと思って、だったら殺人事件の容疑者で逮捕されちゃう前にどんどん教えて貰わないと思って!

お願いします!

係)…おれをなんだと思ってんだよ。
…お前ほんとに“やる気スイッチ”の場所がおかしいんだよ。全部おかしいが。

普通は「技術わかったから、次お願いします!」とかだろ。

そもそも、なんで俺がボコボコにされた夢見てテンション上がってんだよ。

な)いやいやいや、係長なら反撃して勝つでしょ?相手ボッコボコでしょ?死あるのみでしょ?

だから“逮捕前にスキル継承しなきゃ!”っていう使命感が芽生えただけで——

係)継承前にいろいろやることあるだろうが。

な)えっと、殺人犯がいるって通報?

係)まず、なんでか知らんが、殴られてる俺を助けろよ!

な)えー怖い。係長の顔のほうが怖いですけど。

係)おい…

な)でも係長って、こう……

人のミスを静か〜に許さず論破してくタイプじゃないですか。

あれ、もし素手でやったら普通にKO、てか人生をKOさせちゃうんだろうな―って

係)お前の夢で殺人犯に仕立て上げるなよ!

な)そのノリで次のやつお願いしまっす!

係)……はぁ。

そのうちわからせてやるからな。

な)へ!?

係)今日はGO TOの代わりに使う安全装置”、つまり「IFPERFORMEXITの“安全な組み合わせ”」だ。

な)え、いや、いま脅迫が…? 

EXITで抜けた「その瞬間」に何が残る?

係)GO TOは非常階段だって言ったよな?

でも現場のCOBOLって、「非常階段を使わずに脱出したい場面」がものすごく多い。

そこで出てくるのがこれだ。

今日のコード

       MOVE 0 TO CNT
       MOVE 0 TO SUM

       PERFORM CALC-PARA
       DISPLAY "SUM = " SUM
       STOP RUN.

       CALC-PARA.
           PERFORM UNTIL CNT > 5
               ADD 1 TO CNT
               IF CNT = 3
                   DISPLAY "Skip this value!"
                   EXIT PERFORM  *> この周だけスキップして外に出る
               END-IF
               ADD CNT TO SUM
           END-PERFORM
           DISPLAY "CALC-PARA finished."

な)あれ前回EXITやらなかったでしたっけ?頭打っちゃいました?病院行きます?一緒にいきます?俺そのまま帰りますけど。

係)やったよ。“EXIT PERFORM”と“EXIT PARAGRAPH”はやった。

だがな。

今回わざとお前が混乱する地点に誘導してる。

な)また俺を陥れようとしてる!?

係長、俺のこと嫌いでしょ?

俺、みんなに対してOKフリーハグなのに!

EXIT PERFORMとループの誤解ポイント

係)うるせーよ。

お前の理解が“中級レベルの落とし穴”の手前で止まってるだけだ。
前回のEXITはこういう流れで理解したよな?

・EXIT PERFORM → ループだけ抜ける

・EXIT PARAGRAPH → 段落ごと抜けて呼び出し元へ戻る

・STOP RUN → プログラム終了

ここまではいいな。

だがな、今回のポイントは EXITした“瞬間の変数の値”」 だ。

間違えやすいんだよ、これ。

CNTSUMの値は最後はいくつになってる?

な)えーと

CNTSUMを入れて、まずCALC-PARAを走らせると。

CNT以上になるまでルーピングという条件
CNTを足す。

んで、

CNTが3じゃなかったら、SUMにCNTを加算して、再度ルーピング。

CNTがなら、Skip this value!を表示して、EXIT PERFORMで、この世の憂いから離脱!"SUM =" SUMを表示して、エンディングロール。

やっぱり失敗テイクを流すのいいですよね~チェンですよね〜。

終わったら、「CALC-PARA finished.」表示してそのままエンディングロール⋯

あれ?これでいいです?

もっかいPERFORMからぬけただけで、CALC-PARAの中にいるってことは、もっかいPERFORMに戻るとか?

係)・・・ (無言で待ってる)

CNTとSUMはどうなる?落とし穴を踏む直前の理解

な)あ、CALC-PARAの最初に戻るんじゃなくって、そのまま下に進むのか!
だったら、CNTSUMはどっちも3ってことにしておきましょう。

あとは取引先に確認してもらってあっちがいいって言えばOKと。
間違っていてもあっちの責任と。
俺のミスは係長のミスってことにしておいてと。

係)おい待てコラ。なんで取引先と俺のミスになるんだよ!

な)いやだって、係長が俺の上司なんだから、俺のミス=係長の育成ミスってことでしょ?これで取引先は浮かばれますよ。

係)お前がやらかしたときに俺がここにいるとは限らねーだろが。

でもま、今回の理解は、それでほぼ満点だ。

EXIT PERFORMPERFORM を終了して、そのまま段落の下に進む

この流れをつい “段落の先頭に戻る” と誤認しがちなんだよ。

COBOL初心者~中級でも一番やらかすポイントだ。

おむすび

CALC-PARA.
    [PERFORMループ]
    DISPLAY "CALC-PARA finished."

今回はこういう一本道ルートだってことだ。

係)まぁ、こうやって早めに気づくのは悪くないぞ。

な)でしょ?

だから俺のミスは係長のミス。
係長の手柄は俺の手柄。
そして俺の手柄も俺の手柄。
係長のミスは取引先のミス。

ってことでOK?

係)お前の手柄なんて一つもないだろが。そもそもお前は会社の何にも寄与してねーだろ。
つまり、お前のミスと俺の手柄しか無いってことだろ。

な)むきー!!通報してやる!

係)俺もお前の態度を課長に報告しておくわ。

な)やる気満点ってやつですね!

係)勤務態度がなってない、だな。

な)いや、小学生じゃないんですよ…

係長のワンポイント

EXIT PERFORMは “ループだけ” 抜ける。段落の先頭には戻らない。
だから、抜けた瞬間のCNTSUMの値がそのまま段落後半へ流れ込む。
EXIT=元に戻ると誤解してると、値ズレバグの原因になるぞ。

― 目次(読みシリーズ)へ戻る ―

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

この記事を書いた人

コメント

コメントする