【COBOL 読み3-5-3】GO TOを使ったときの地獄プラスα〜静寂とたこ焼き

🧩今日の学び
NEXT-RECは処理の意味を持たず、GO TOを成立させるためだけに生まれる“足場”である
GO TOを選ぶと、制御の後始末・安全確認・説明責任まで人間が背負うことになる

なるお)係長?

GO TOのコードの例示内にNEXT-REC.って最期にふと出てきてますけど、これってなんでですの?

間違っちゃいました?ついに間違っちゃいました?

係)なんで嬉しそうなんだよ!

しかし、いいところ突いてきたな。

もう一回コードをみてみろ。

PERFORM VARYING I FROM 1 BY 1 UNTIL I > CNT
    IF STATUS(I) NOT = "OK"
        GO TO NEXT-REC
    END-IF

    IF TYPE(I) NOT = "A"
        GO TO NEXT-REC
    END-IF

    IF AMOUNT(I) <= 0
        GO TO NEXT-REC
    END-IF

    DISPLAY "処理する:" I

NEXT-REC.
END-PERFORM

結論から言うぞ。

このコード構造なら、NEXT-REC. は「GO TOを使うためだけに必要」なラベルだ。

逆に言うと、GO TOを使わないなら、NEXT-REC. 自体が不要だぞ。

目次

なぜ NEXT-REC. が必要なのか

  • GO TO必ず「飛び先のラベル」が必要
  • そのラベルがNEXT-REC.となる。

ちなみに、NEXT-REC.PARAGRAPHラベルだ。

  • 単なる「目印」
  • 処理は何もしない
  • GO TOの着地点

な)え!?なんもしない???

無能社員!?給料泥棒!?憧れの眼差し!?

係)お前と同種だな。

な)ええ!?

係)その前に憧れんなよ!

このNEXT-REC.はな

PERFORMの中にある

ループの外では使えない

構造としてはその場しのぎのジャンプ先

ということになる。

だから、GO TOを使う限り、NEXT-REC.は絶対に消せないんだ。

じゃあ消したらどうなる?

コードではGO TOの行き先が書かれているのに

GO TO NEXT-REC

行き先である

NEXT-REC.

がなくなるため、行き先不明でコンパイルエラーという未来になる。

つまり、「GO TOを使うことを選んだ瞬間、NEXT-REC.は必要」になる。

GO TO NEXT-REC
↓
NEXT-REC.

でもな、EXIT PERFORM CYCLEを使えば、そもそも要らないんだよ。

IF STATUS(I) NOT = "OK"
    EXIT PERFORM CYCLE
END-IF

まとめるぞ。

NEXT-REC.GO TOが生んだ“足場”となる。

構造として意味はない

読み手にとってはノイズ

書いた理由は「GO TOしたいから」

な)GO TOで飛ぶんだったらこういうことも考えないとならないってことっすね…ふむむ。

係)そう。GO TOを使うなら「考えること」が増える。

つまり、GO TOで飛ぶってことは、「自分で流れの後始末を全部考えろ」ってことだ。

それじゃ、何を考えなきゃいけないかということだが、GO TOを使うと発生する“追加タスク”がこうなる。

1 飛び先を作る
  NEXT-REC.みたいなラベルが必要

2 そのラベルが安全な位置か確認
  変数は壊れてないか
  PERFORMの中か外か

3 飛んだ後の制御を想像
  次の文?
  次の周回?
  それとも別の段落?

4 後から条件が増えた時の整理
  ラベル増殖
  GO TO連鎖

5 読む人への説明責任
  「なぜここに飛ぶのか」を
  コメントや命名で補う必要

GO TOは言語がやるべき仕事を人間に丸投げする命令だってことだ。

ただな、インラインPERFORMの中にラベル書くというのは、コンパイラによっては通るが、構造としては怪しい。

だから余計に「GO TOを選んだ時点で無理が出る」ってことになるわけだな。

おむすび

係)…なんか今日は静かに聞いてたな。また変なことでも妄想してたんじゃないのか?

な)へ?俺にだって考えることぐらいありますよ!

係)そ、それは悪かった…

な)たこ焼き食いたいんで、どこの銀だこが近いか考えてたんですよ!

係)俺は何に謝罪したんだよ…

係長のワンポイント

NEXT-REC. は処理ではなく、GO TO のためだけに作られた足場だ。
GO TO を書いた瞬間、「飛び先を用意する責任」が発生する。
それが安全な位置か、PERFORM の内か外かまで考えさせられるのが本質的な地獄だ。
EXIT PERFORM CYCLE なら、その判断と後始末を言語が引き受けてくれる。
GO TO は処理を短くするが、考えることを確実に増やす。

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

この記事を書いた人

コメント

コメントする

目次