【COBOL 読み2-7-1】地獄からの脱出は?~EXIT EVALUATE

🧩今日の学び
EXIT EVALUATE は「条件を満たした瞬間に評価を打ち切る」緊急脱出口である。
EVALUATE ALSO は“表構造”、EXIT は“流れ制御”──係長の言うとおり、思想そのものが違う。
・次回は「どの条件分岐をどの書き方で実装すべきか」という“選択の基準”へ踏み込む。

なるお)係長、俺なんか楽しくなってきましたよ!

だから、はい!はいはい!!さっさとコード出す!ゾーン抜けちゃうから急いで!

係長)なんで偉そうになってんだよ。
ほんとにゾーン入ってんのか…、ゾーンに入っているやつがそんなこと言わねーだろ。

ま、いいや本日のお題EXITで地獄からの脱出」編、いくぞ。

       MOVE "B" TO GRADE
       MOVE 78  TO SCORE
       MOVE 88  TO ATTEND

       EVALUATE GRADE
           WHEN "A"
               IF SCORE >= 90 AND ATTEND >= 90
                   MOVE "Honor Student" TO TITLE
                   EXIT EVALUATE
               END-IF
               MOVE "Achiever" TO TITLE
           WHEN "B"
               IF SCORE >= 80 AND ATTEND >= 85
                   MOVE "Steady Worker" TO TITLE
                   EXIT EVALUATE
               END-IF
               IF SCORE >= 70 AND ATTEND < 85
                   MOVE "Average" TO TITLE
                   EXIT EVALUATE
               END-IF
               MOVE "Needs Effort" TO TITLE
           WHEN OTHER
               MOVE "Needs Effort" TO TITLE
       END-EVALUATE.

な)GRADEがAのとき、SCOREATTENDのどちらも90以上だったら、Honor StudentTITLEに入れる。

EXIT EVALUATEで、EVALUATEを抜けるってことになるよね。つまり、その下の処理は全無視できると。

Aじゃなければ、Bにいくというだけっすよね?どっちでもなかったら、その処理をするだけ。

結局、書き方としては、前にやった下の書き方とどっちがいいんです?

       EVALUATE GRADE ALSO TRUE ALSO TRUE
           WHEN "A" ALSO SCORE >= 90 ALSO ATTEND >= 90
               MOVE "Honor Student" TO TITLE
           WHEN "B" ALSO SCORE >= 80 ALSO ATTEND >= 85
               MOVE "Steady Worker" TO TITLE
           WHEN "B" ALSO SCORE >= 70 ALSO ATTEND < 85
               MOVE "Average" TO TITLE
           WHEN OTHER
               MOVE "Needs Effort" TO TITLE
       END-EVALUATE.

係)お前の理解はかなり正しいぞ。

EXIT EVALUATEの正体:条件成立の瞬間に“逃げる”命令

EXIT EVALUATE は、その時点で評価処理を打ち切る命令だからな。
残りのWHENや下の処理はスルーして、END-EVALUATE. までジャンプする感じだ。

WHEN "A"
    IF SCORE >= 90 AND ATTEND >= 90
        MOVE "Honor Student" TO TITLE
        EXIT EVALUATE
    END-IF
    MOVE "Achiever" TO TITLE

だからこのように書くと、「条件を満たした瞬間に終了」=それ以降の“Achiever”処理が無視されるというわけだ。

そして比較したとき、どっちがいいのかってはなしだが、実はどちらも正解だ。

もっというと、用途と読みやすさで使い分けるってのが正解だ。

IF+EXIT方式の特徴:途中脱出できる柔軟性と“迷子リスク”

① EXIT EVALUATE 方式

EVALUATE GRADE
    WHEN "A"
        IF SCORE >= 90 AND ATTEND >= 90
            MOVE "Honor Student" TO TITLE
            EXIT EVALUATE
        END-IF
        MOVE "Achiever" TO TITLE
    ...
END-EVALUATE
  • 柔軟に途中脱出できる
  • ✅ ネスト構造(IFIF)でも「もういいや」って抜けられる
  • EXIT多用すると「どこで抜けたかわからん」地獄になる

つまり、“途中で抜けたいときだけ”に使うものであって、条件が複雑で、WHENでは書けない場合に便利。

ALSO方式の特徴:表で整理する“条件マトリクス”の世界

② ALSO(多項目EVALUATE)方式

EVALUATE GRADE ALSO TRUE ALSO TRUE
    WHEN "A" ALSO SCORE >= 90 ALSO ATTEND >= 90
        MOVE "Honor Student" TO TITLE
    WHEN "B" ALSO SCORE >= 80 ALSO ATTEND >= 85
        MOVE "Steady Worker" TO TITLE
    WHEN "B" ALSO SCORE >= 70 ALSO ATTEND < 85
        MOVE "Average" TO TITLE
    WHEN OTHER
        MOVE "Needs Effort" TO TITLE
END-EVALUATE
  •  条件が並列的にきれいに見える
  • EXIT不要、構造的で安全
  • ❌ 条件が少しでも複雑になると、書き換えが面倒

“表で整理できる条件”なら絶対こっちが見やすい。

おむすび

つまりだな——

  • IFEXITは、流れ制御型(手続き思考)
  • EVALUATE ALSOは、条件マトリクス型(表思考)

どっちを選ぶかは、「お前がその日、何を大事にしたいか」で変わる。

というか…お前寝てんのか?

な)ま、へ、寝てないっしゅよ!

係)よだれ垂れてんだよ!

係長のワンポイント

EXIT EVALUATE は“その場で評価を打ち切る”強制終了ボタンだ。
条件式が複雑で WHEN だけでは表現しにくい時に威力を発揮する。
ただし多用すると「どこで抜けたか」が読めなくなり、未来の自分が地獄を見る。
一方ALSO方式は“途中脱出なしの構造的な分岐”で、安全性と可読性が圧倒的に高い。
途中離脱が必要なら EXIT、整理された表構造で書けるなら ALSO──これが正しい使い分けだ。

― 目次(読みシリーズ)へ戻る ―

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

この記事を書いた人

コメント

コメントする