🧩今日の学び
・NEXT SENTENCEは構造で抜ける命令ではなく、ピリオドという記号に依存して制御を飛ばす“非構造的非常口”である
・EXIT系は「意味や構文で影響範囲が読める」が、NEXT SENTENCEは「どこまで飛ぶかをコード全体で確認しないと分からない」という決定的な違いがある
係)次はNEXT SENTENCEだ。
お前はNEXTだから先を見るだろうが、そういう意味の「次」じゃない。
これは“後始末”という意味になる。
な)え?何いってんすか?NEXTって付いてるのに後始末とか言い出しちゃいました?
ついに英語拒否、ここに極まれりですか。「お前がやってるのはベースボールじゃない、野球だ、ハハハ!」ですか?
係)…。
NEXTは名前が一番の罠になっている。
NEXT SENTENCEは「次の文」には行かない。「次のピリオドの後」に行く。
な)また、訳わからないことを…。
係)お前な…。
NEXT SENTENCEの正体:「次の文」ではなく「次のピリオド」
係)最小のコードだ。読んでみろ。
IF A = 1
DISPLAY "Aは1"
ELSE
NEXT SENTENCE
DISPLAY "ここが次".
な)はーい。
えーと、Aが1だったら、”Aは1“って表示されて、Aが1じゃなかったら、NEXT SENTENCEで次の文なんだから“ここが次”が表示されるんすよね?
どうしたんすか?係長らしくない素直なコードじゃないっすか。ひねくれてないとか心配っすよ…。
係)違う。
な)へ?何が?実は入院中で、生霊でしたとか?
係)誰が生霊だよ!
さっき俺が言った意味がわかってないんだなって意味だよ!NEXT SENTENCEは「次の文」には行かない。「次のピリオドの後」に行くっていっただろ。
つまりだ…NEXT SENTENCEは
・次のピリオドまで全部スキップ
・そのピリオドの後から再開
ということだ。
このコードだと、DISPLAY "ここが次".の後に行く。
な)……じゃAが1じゃなかったら、DISPLAY "ここが次".ここのピリオドに行っちゃうってことっすか?だったら、何も表示されないってこと?
係)そう。
な)えーなんで!?
係)なんでってなんだよ。単純な話だぞ。
昔の COBOL には、 END-IFもなかった。つまり、ブロックが閉じられなかった
だけど、「とりあえず IF を抜けたい」。
そのための非常口がNEXT SENTENCEというわけだ。
つまり、NEXT SENTENCE = ピリオド依存型 GO TOということになる。
・飛び先は見えない
・ピリオドの位置で意味が変わる
・構造がコードから消える
だったら、EXITと何が違うという疑問が出てくるだろ?
な)え、そうなんすか?
係)あ?
な)いや、そうですね!そりゃ出てきますよね!いやー知りたい。実に知りたい。ほんとEXITとの違い知りたいなって、「一富士 二鷹酸 三EXIT」の初夢見てましたもん!
係)…お前は…
EXIT系との決定的な違い:意味で抜けるか、記号で飛ぶか
係)いいか、
• EXIT PARAGRAPH
→ 影響範囲が名前で分かる
• EXIT SECTION
→ 塊ごと抜ける
• EXIT PERFORM
→ ループ終了
• EXIT PERFORM CYCLE
→ 今回だけスキップ
NEXT SENTENCE
→影響範囲が「記号」依存
な)はぁ・・・
係)なんで気のない返事になるんだよ!
な)係長俺をいじめてます?わざと俺がわからないように言ってますよね…
係)お前ね、復習ぐらいしろよ!
はぁ…もう少し説明するぞ。
■ EXIT PARAGRAPH
「このPARAGRAPHを抜ける」
- 影響範囲:今いる入口だけ
- 名前=影響範囲
- 読んだ瞬間に理解できる
つまり、 名前で分かる
■ EXIT SECTION
「このSECTIONの残り全部を抜ける」
- 影響範囲:処理の塊
- 名前=影響範囲
PARAGRAPHより一段大きいだけ
つまり、名前で分かる
■ EXIT PERFORM
「このPERFORMを終わらせる」
- 影響範囲:ループ全体
PERFORMという構造に紐づいている- BEGIN〜END が見えている
つまり、構文で分かる
■ EXIT PERFORM CYCLE
「この周回だけなかったことにする」
- 影響範囲:今の1回分
- どこに戻るか言語が保証
continueと同じ安心感
つまり、構文で分かる
■ NEXT SENTENCE
「次のピリオド(.)まで飛ぶ」
- 影響範囲:コードの構造では決まらない
- 名前でも構文でもない
- 句読点の位置で意味が変わる
→ 記号で決まる
まとめるぞ。
・EXIT PARAGRAPH について
【COBOL 読み3ー1】EXITでいろいろ抜けてしまえ!〜EXIT PARAGRAPH
・EXIT SECTION について
【COBOL 読み3-4-1】ベテラン歌手の引き際〜EXIT SECTIONとPROGRAMの終幕
・EXIT PERFORM について
【COBOL 読み3-3】ノックアウト〜PERFORM(人間界)をEXIT
・EXIT PERFORM CYCLE について
【COBOL 読み3-5-1】係長も搾取対象時代〜ループ抜け兄弟
もう少し言うと、
EXIT系 : 人間が読める単位で決まるNEXT SENTENCE: タイプライタの記号で決まる
EXIT PARAGRAPH → 名前
EXIT SECTION → 名前
EXIT PERFORM → 構造
EXIT PERFORM CYCLE → 構造
NEXT SENTENCE → 記号(.)
EXITは「意味」で抜ける。
NEXT SENTENCEは「記号」で飛ぶ。
EXIT系は「ここまで」って言葉で説明できるが、NEXT SENTENCE は「どこまで?」と聞き返したくなる。
なので、読め。理解しろ。でも書くな。
な)なんの標語すかそれ⋯。
なぜ今も存在するのか:安全そうに見える非常口の正体
な)あれ?そうなるとNEXT SENTENCEはGO TOみたいなもんすか?
係)うーん、GO TOより分かりにくいGO TOといったほうがいいか。
な)えー!問題児の中の問題児じゃないっすか!学級崩壊どころの騒ぎじゃないっすよ!漂流教室ですよ!楳図先生は絶望の画がうますぎなんすよ!一目で絶望ってわかるんすよ!
でも、係長は学校をリアルに壊してた世代でしたっけ。なら安心ですね!
係)どこに安心があるんだよ!
いいかGO TOが嫌われる理由は、「飛び先が見えず、そして、構造を壊す」ということにある。
NEXT SENTENCEは、それに加えて「一見、安全そうに見える」ということだ。
IF 条件
処理
ELSE
NEXT SENTENCE
END-IF
な)なんか問題ないように見えちゃいますけど?
係)そこが罠だ。
NEXT SENTENCEは
次のピリオドまで全スキップ
どこまで飛ぶかは、コードを全部見ないと分からない
ピリオド1個動いただけで、挙動が変わる
GO TOは「下手でも意図が見える」が、NEXT SENTENCEは「意図ごと消してしまう」んだ。
じゃ、なぜ存在を許されているのかというとだ、
• 古いコードを読むため
• 互換性のため
• 規格から消せないから
というのが理由だ。
NEXT SENTENCEはEXITが生まれる前の“時代の非常口”なんだよ。
だから、「使え」じゃなく、「読め」ということになるんだ。
おむすび
な)曽祖父っすね。
係)は?
な)だっておじいちゃんのおじいちゃんだから曽祖父?
係)はぁ?なんの話してんだ?
な)だってCOBOLはおじいちゃんで、その生まれる前の時代だから、曽祖父?
係)そもそもなんでCOBOLがおじいちゃんなんだよ。
な)でも人生100年時代ですからね。係長も100歳まで見守っててくださいね!
係)お前いつまで会社にいるつもりだよ…。
係長のワンポイント
NEXT SENTENCEは「意味で抜ける」のではなく、ピリオドという記号で飛ぶ命令だ。
どこまで飛ぶかは構造では決まらず、コード全体を見ないと分からない。
だからEXIT系と違い、影響範囲が名前にも構文にも現れない。
安全そうに見えるのが最大の罠で、GO TOより意図が読めなくなることすらある。NEXT SENTENCEは“使う非常口”じゃない──“読めるようになるための遺構”だ。

コメント