【COBOL 読み2-8-2】PERFORM抜けでの初期化話〜スケバン刑事と饅頭と

🧩今日の学び
EXIT PERFORM後のCNTは外へ生き残るため、再利用には初期化が必須であることを理解した。
・係長の「初期化は礼儀」という教えで、COBOLが“人情と安全運用の言語”である理由が腑に落ちた。
・ループ変数管理は次回にもつながる基礎──片付ける習慣がCOBOL力を底上げする。

な)ちょっと思ったんすけど、

PERFORMから抜けちゃったら、前にある MOVE 1 TO CNTは生きてるんですよね?

だったら、CNTはいまのままってことですよね?

これまた使う場面があるかもって思っておかないとですよね。

めんどくさくないです?

また使うときやっぱり、MOVE 1 TO CNTするのが当たり前すか?

係)おっと、まさか“現場っぽい質問”をしてくるとはな。

な)やっぱ俺もそろそろ「COBOLの呼吸・饅頭ノ型!」とか言っていいですか!?

係)まんじゅうってなんだよ…

な)なんかまんじゅうが頭の中に浮かんだので。よもぎ栗まんじゅう食いたいっす。

係)よもぎ栗まんじゅうってどんなだよ。

な)3,850円でしたよ?

係)あるのかよ…いや、お前そんな高級なもん食ってんのか?

な)そりゃ食うでしょーよ。まだ残ってるから持ってきます?それとも出張いって買ってきます?確か北海道なんで朝市とかですかね?

係)いいんだよ!そんなことは。朝市になんの用があるんだよ!

な)自分から盛り上がってきたくせにー。

係)あーもー!なんだった!?
もうまんじゅうしか思い出せねーじゃねーか!!

EXIT PERFORM後のCNTは残る:外へ持ち越される変数の正体

とりあえず前回のコードだ。

       MOVE 1 TO CNT.

       PERFORM UNTIL CNT > 10
           DISPLAY "COUNT: " CNT
           IF CNT = 5
               DISPLAY "Reached 5, exiting loop."
               EXIT PERFORM
           END-IF
           ADD 1 TO CNT
       END-PERFORM

       DISPLAY "Loop finished.".

これのEXIT PERFORMの話だったな。まったく、余計なことばかり…ったく。

な)だから乗ってきたの係長…

係)EXIT PERFORMで抜けてもCNTは生きてる。

つまり値は保持されてる。

だからこの例だと、抜けた時点でCNT=5のまんまだ。

つまり“外に持ち越されるループ変数”ってやつだな

だから「次に使うときにどうするか」を自分で明示しておく必要がある。

そこがCOBOLの“めんどくささ”でもあり、“誠実さ”でもある。

初期化は“礼儀”:COBOLが人情で動くと言われる理由

な)ふむー、やっぱ初期化しておいたほうが安全ってことすね。

係)そうだな。特にPERFORMを抜けたあと、「もう一回同じループ使う」場合は

MOVE 1 TO CNT

を入れ直すのが“礼儀”だ。

な)礼儀!?

係)そうだ。

CNT5のままなのにまたループ始めたら、「なんで5からなんだよ!」って次の人がキレるだろ。

な)そんなんで切れるとか心狭すぎじゃないっすか!?だから老害とか言われ…

係)なんでこっち見て言ってるんだ?ん?

な)そんな自覚しないでください!係長は違いますよ!
そんな人だらけらしいって話ですよ!

もう倉庫に積まれてパンパンなぐらい「だらけ」ですよ!フォークリフトでブンブン運ばれてますよ!

係)怖いわ!!
話がぶれすぎだっての。

次の担当がデバッグ中に「CNTどこで初期化してんだよ!?」って叫びだして、胸倉掴まれるぞ。

お前にならやるぞ。

な)ひぃ!!老害レベルを大きくオーバーしないで!

係)本音出やがったな。

つまり「あとのやつに怒鳴られないように初期化する」

——それがCOBOLの仁義ってわけだ。

まぁ実際、COBOLは人情で動く言語だからな、抜けたら戻す、使ったら片付ける。

これができねーやつが“バグの親分”になる。

おむすび

な)COBOL仁義とかCOBOL親分とか…

なんか極道映画みたいでそれはそれでかっこいいっすね!

「おまんら許さんぜよ!」でしたっけ?

係)それスケバン刑事だからな…

な)え、なんすかそれ…?

係)……(顔真っ赤)

係長のワンポイント

EXIT PERFORMは“ループだけ抜ける”処理で、変数の中身はそのまま外へ持ち越される。
だからCNTは抜けた時点の値(今回は5)を保持し続け、次の処理に影響を与える。
同じループを再利用するなら、開始前に必ず MOVE 1 TO CNT を書くのが現場の礼儀だ。
「初期化は親切、放置は爆弾」──COBOLは後ろの人が困らない設計が最優先。
抜けたら戻す・使ったら片付ける──これがCOBOL仁義だ。

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

この記事を書いた人

コメント

コメントする