🧩今日の学び
・GO TO文は制御構造を無視して処理を飛ばす“非常口”。
・係長いわく「GO TOは社長命令レベル。使うときは覚悟を決めろ」。
・安全なフロー設計こそCOBOLを“現代に繋ぐ鍵”。
今日のコード
MOVE 1 TO CNT.
IF CNT = 1
GO TO STEP-A
ELSE
GO TO STEP-B
END-IF.
STEP-A.
DISPLAY "Now in STEP-A"
GO TO STEP-C.
STEP-B.
DISPLAY "Now in STEP-B"
GO TO STEP-C.
STEP-C.
DISPLAY "Now in STEP-C"
STOP RUN.
なるお)なんかもう、やれとも言わなくなったなー。自由奔放主義と見せかけて、娘さんんには門限16時とか言ってる人だよあの人。仕事に出れないっつーの。
まぁ読みますか…っと。
1をCNTに入れて、CNTが1だったら、STEP-Aを実行。
“Now in STEP-A“を表示してSTEP-Cを実行。”Now in STEP-C“と表示して、終了。STEP-Bはミソッカスですか、そうですか。係長!もっと人の心を持って!
係長)すぐ演劇がはじまるな…。
な)なんちゅーか、GO TOってこんなもんだってのはわかりましたよ。
でも下に進むなら、IF地獄でもEXIT PERFORMで終わらせてもなんか同じじゃないんすか?
GO TO使って飛ばす意味がわからないんですけど⋯
何を選べば正解というか、正解王というか、王様ゲームというか。
王様の言うことはぜったーい!
IF地獄とGO TO王国
係)「GO TOは、“構造”を無視して流れを強制的に変える装置」ってことだ。
IF や PERFORM は「構造の中」で分岐・抜ける。
つまり——「筋を通して抜ける」。
PERFORM UNTIL X > 5
IF ERROR-FLAG = 1
EXIT PERFORM
END-IF
ADD 1 TO X
END-PERFORM
この場合、「PERFORMを終わらせる」っていう筋道がある。
呼び出し元にちゃんと“帰る”。
──会社で言うなら「定時で退勤」ってとこだ。
一方で、GO TO は、構造の外にワープする。
「どこへでも行けるけど、二度と戻れない」。
しかも、“呼び出し構造”の存在を無視する。
IF ERROR-FLAG = 1
GO TO ERROR-HANDLER
END-IF
これ、もし中で10段ネストされてても、GO TO ひとつでぜんぶすっ飛ばして ERROR-HANDLER. に行く。
──会社で言うなら「上司の会議すっ飛ばして社長室に直接突入」といったところだ。
な)こないだ社長室でお茶のんできました。
係)はぁ?お前社長室に何しに行ったんだ?
な)え、おじいちゃんが入ってきたから、社長室に案内したら社長だったってだけですけど。
係)…お前にはあまりかかわらないほうが良さそうだな…
な)えーなんでですか!?
係)なんでもくそもねーから!ったく。
非常階段を使うな!COBOL流・緊急脱出の心得
係)だからCOBOLの世界ではGO TOは「非常階段」扱い。
火事の時だけ使え。
普段の出入りは玄関(PERFORM)でやれ。
| 構文 | 性質 | 正しい使い方 |
|---|---|---|
| IF + EXIT PERFORM | 構造の中での分岐・終了 | 通常のロジック制御 |
| GO TO | 構造を飛び越える緊急脱出 | エラー処理、異常終了のみ |
な)じゃあつまり、「王様ゲームで全員王様にキッシング!(Kissing)」みたいな命令がGO TOっすね。
係)ドイツか。
な)へ??
係)わかんねーならいいよ!
おむすび
係)ま、まぁ、王様が「GO TO土下座」って言ったら全員すぐやる感じだな。
な)EXIT PARAGRAPH は「やだ!もう帰る!」で、GO TOは「社長が出てこい!」ってことですね。
係)俺に王様ゲームの例えさせといて、まともな例を挙げるなよ!
な)え、まともでした…?
係)もー!
係長のワンポイント
GO TOは「構造を無視して処理を強制的に飛ばす」非常用スイッチだ。PERFORMやEXITは“筋を通って戻る”が、GO TOは“戻らない前提”で飛ぶ。
だからネストの深さも呼び出し元も関係なく、一気に別世界へ行けてしまう。
便利だが、流れは一瞬で壊れ、後から読む人の地図も消える。GO TOは火事のときだけ使え──普段の出入り口は必ず構造で作れ。

コメント