🧩今日の学び
・EXIT系命令は「脱出単位の違い」で整理すると一気に理解できる。
・GO TOやNEXT SENTENCEは、構造と意図がコードに残らない点が最大の危険。
・COBOLの制御は“どう抜けるか”を明示することで、安全性と可読性が保たれる。
係長)ずっとEXIT関係を説明してきたが、ちゃんと理解してるんだろうな?
なるお)ろん of もち ですよ!
係)聞いた俺が間違いだったと…。
まぁいい。今日は EXITの総まとめ回とするぞ。
ちゃんと使い分けできるようになれ。
な)同じような話が続くんですもの⋯。使い分けとか言われても…。
係)コードなんてそういうもんだろが。いちいち文句言うな。覚えろ!
な)また横暴な…
あ、暴暴茶飲んだことあります?
係)ないし、どうでもいい。
な)え!?
係)まずは全体像からだ。
な)はい…
EXIT系は全部「脱出口」だが、脱出単位が違う
係)EXIT 系は全部「脱出口」だが、脱出単位が違う
これだけ覚えればいい。
な)また難しい感じに言う…
係)うるさいからな。
① EXIT PARAGRAPH
EXIT PARAGRAPHは、いま入っている入口だけ抜ける
コード例
MAIN-PARA.
DISPLAY "開始"
PERFORM SUB-PARA
DISPLAY "戻ってきた"
STOP RUN.
SUB-PARA.
DISPLAY "サブ処理"
EXIT PARAGRAPH
DISPLAY "ここは実行されない".
結果
開始
サブ処理
戻ってきた
• 影響範囲:そのPARAGRAPH
• 小さく・安全
• 一番局所的
イメージとしては「この部屋から出る」
な)部屋から出る。買い物にでも出かけるんですかねー。
② EXIT SECTION
係)EXIT SECTIONは処理のかたまりごと抜ける。
コード例
MAIN-SECTION.
PERFORM INIT-PARA
PERFORM MAIN-PARA
DISPLAY "ここは実行されない"
STOP RUN.
INIT-PARA.
DISPLAY "初期化"
EXIT SECTION.
MAIN-PARA.
DISPLAY "本処理".
結果
初期化
• 影響範囲:SECTION 全体
• 初期化失敗・前提条件NGで使うことが多い
イメージは「このフロアはもう用無し」
な)どんだけ広い家なんだって話ですよね。絶対姫じゃないですかこれ。馬車に乗りに行く途中じゃないですか!
③ EXIT PERFORM
係)EXIT PERFORMは、ループ自体を終わらせる
コード例
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
IF I = 3
EXIT PERFORM
END-IF
DISPLAY I
END-PERFORM
結果
1
2
• 影響範囲:PERFORM 全体
• break 相当
イメージは「今日はもう店じまい」
な)馬車でお気に入りのブティックにいったら、「今日店じまいなんで…」とか言われて、セバスチャンに「このお店潰しておしまい!」とか怒りのままに言っちゃってますよ。これだからプリンセスのわがままは。
④ EXIT PERFORM CYCLE
EXIT PERFORM CYCLEは、今回の1周だけスキップだ。
コード例
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
IF I = 3
EXIT PERFORM CYCLE
END-IF
DISPLAY I
END-PERFORM
結果
1
2
4
5
• 影響範囲:今の1回
• continue相当
• 一番“構造に優しい”
イメージとしては、「この客は飛ばして次」
な)まだプリンセスムーブ続きますか!違う店に行ったら下民が先に会計しようとして、「下民は後回しでよろしいでしょう?最上民のあたくしが一番でしょう?」みたいな。まったくわがままに育ちすぎですぞ姫。
⑤ EXIT PROGRAM
係)EXIT PROGRAMは、呼び出し元に戻る(前提あり)だ。
コード例
メイン
CALL "SUBPROG"
DISPLAY "戻った"
STOP RUN.
サブ
SUBPROG.
DISPLAY "サブ処理"
EXIT PROGRAM.
結果
サブ処理
戻った
• CALLされていることが前提
• CALL専用サブで使う
• 意図が強い
※メインで使うと 何も起きない(危険)
イメージとしては、「俺の仕事はここまで」
な)ついにセバスチャンに見放されちゃいますよね!馬車から放り出されてあっけにとられる姫。スポットライトを浴びて「あぁ、私はなんてわがままだったのか」って、気づくの遅いわ!セバスチャンも呆れてますよね、絶対!
⑥ GOBACK
係)GOBACKは「帰れるなら帰る/無理なら終わる」だ。
コード例
SUBPROG.
DISPLAY "処理中"
GOBACK.
• CALLされていたら、CALL元へ戻る
• メインなら終了
• 一番安全だが、意図は弱い
イメージは「来た道があれば帰る」
な)そうですよね。初めて歩いて帰る姫。歩き姫。スカートの裾をずりずりと引きずりながら汚い道を歩く姫。セバスチャンもその姿を見ると涙が止まらないですね!
⑦ NEXT SENTENCE(※例外枠)
NEXT SENTENCEは「次のピリオドの後へ」だったな。
コード例
IF A = 1
DISPLAY "A=1"
ELSE
NEXT SENTENCE
DISPLAY "ここが次".
DISPLAY "終了".
A = 1 だったときの結果
A=1
ここが次
終了
A ≠ 1 だったときの結果
終了
※「DISPLAY “ここが次”.」は 実行されないぞ。
• 構造・名前では決まらない
• 記号依存
• 読むために知る/書かない
イメージは「句読点ワープ」だな。
な)セバスチャンの能力「姫ワープ」を使用して、姫を屋敷にワープさせたんですね。姫も改心して、素晴らしい国になっていくんですね⋯感無量ですね。
係)だから、どこに姫要素があったんだよ…。
EXIT METHOD / EXIT FUNCTION
な)あれ?なんすかEXIT METHOD / EXIT FUNCTIONとか。
そんなのやってないっすよ!俺の記憶力は最強なんですから!
係)なんでやったことは覚えていないのに、やってないことは覚えてるんだよ…
いいか、これはモダンCOBOL限定な話だ。
一言で言うと「METHOD / FUNCTION から抜ける EXIT」ということだ
EXIT METHOD
コード例
METHOD-ID. SAMPLE-METHOD.
DISPLAY "メソッド開始"
EXIT METHOD
DISPLAY "ここは実行されない"
END METHOD.
結果
メソッド開始
呼び出し元に戻った
呼び出し側のイメージ
INVOKE OBJ "SAMPLE-METHOD"
DISPLAY "呼び出し元に戻った"
EXIT METHODに到達した瞬間、「メソッドの処理は終了」- その下に書いてある処理は「全部スキップ」
- 「呼び出した側に制御が戻る」
EXIT FUNCTION
FUNCTION-ID. ADD-ONE.
IF X < 0
EXIT FUNCTION
END-IF
MOVE X + 1 TO RETURN-VALUE
END FUNCTION.
FUNCTIONを終了- 戻り値を返す
return相当
もう少し詳しく言うと「関数を終了して、値を返す(または返さず戻る)」ということになる。
それでコードの結果だが、
ケース①:X = 5 のとき
IFに入らないRETURN-VALUEに6が入る- 関数終了
呼び出し側の結果
戻り値 = 6
ケース②:X = -1 のとき
IFに入るEXIT FUNCTION実行RETURN-VALUEを設定しないまま終了
呼び出し側の結果
戻り値 = 未定義(処理系依存)
EXIT FUNCTION の注意点
係)EXIT FUNCTIONは必ず戻り値を意識しろ。
- 途中
EXITするなら- デフォルト値を入れる
- もしくは異常値を返す
MOVE -1 TO RETURN-VALUE
EXIT FUNCTION
という感じだ。
| 命令 | 対象 |
|---|---|
| EXIT PROGRAM | 従来のプログラム |
| EXIT METHOD | OOPの METHOD |
| EXIT FUNCTION | FUNCTION |
全部「脱出単位」が違うだけで、思想は同じだぞ。
な)一言でまとめられるんじゃないんですか…
係)記憶力いいんだろ?こんぐらいすぐ覚えろよ。
な)おじさんは、すぐ根に持つ…。
全体的なまとめ
係)いいから、全体をまとめるぞ!
EXIT は「いま何の中にいるか」で選ぶんだ。
EXIT PARAGRAPH → 入口を抜ける
EXIT SECTION → かたまりを抜ける
EXIT PERFORM → ループ終了
EXIT PERFORM CYCLE → 今回だけスキップ
EXIT PROGRAM → CALL元へ戻る(前提あり)
GOBACK → 状況判断して戻る or 終了
NEXT SENTENCE → ピリオド依存ワープ(書くな)
EXIT METHOD/FUNCTION → OOP用の出口
そして逆から考えるとこういうことになる。
PARAGRAPH の中 → EXIT PARAGRAPH
SECTION の中 → EXIT SECTION
PERFORM の中 → EXIT PERFORM / CYCLE
METHOD の中 → EXIT METHOD
FUNCTION の中 → EXIT FUNCTION
PROGRAM の中 → EXIT PROGRAM / GOBACK
つまり、
EXITは「逃げ」じゃなく、構造を壊さずに抜ける正式ルートGO TOは非常口を壊すNEXT SENTENCEは非常口が見えない
ということだ。
おむすび
な)はーなんか感動ですよね。
係)そうだな、EXIT関係でもこれだけあるんだからな。
覚えるまで時間がかかるが、ここは必須だぞ。
な)姫は今後どうなると思います?
係)は?
な)やーだって、COBOL姫が安泰じゃなかったら、国が傾きますよ?そんなんじゃ姫のために下民は戦ってくれないですよ?
係)どこの国だよ!勝手にCOBOLと合体させるな!
係長のワンポイント
EXITは全部「逃げ」じゃない──構造を壊さずに抜けるための正規ルートだ。
違うのは“どこまで終わらせるか”という脱出単位だけ。PARAGRAPH・SECTION・PERFORM・PROGRAM・METHOD・FUNCTION、それぞれ出口が用意されている。GO TOは非常口を壊し、NEXT SENTENCEは出口を見えなくする。EXITを正しく選べる人間が、COBOLを安全に書ける。

コメント