【COBOL 読み2-1】新章開始 まだまだ終わらない旅〜EVALUATE祭り

🧩今日の学び
・EVALUATE TRUE は「IFの連続を1本化して読みやすくする」COBOLの思想そのもの
・係長の説明どおり“読む負担を減らす”ことがCOBOL設計の核心
・次回は EVALUATE の“多分岐・多値比較”の真価にさらに踏み込む

係長)ま、さっさと駆除されてこい。

今日のコード

       EVALUATE TRUE
           WHEN SCORE >= 90
               MOVE "A" TO GRADE
           WHEN SCORE >= 80
               MOVE "B" TO GRADE
           WHEN SCORE >= 70
               MOVE "C" TO GRADE
           WHEN SCORE >= 60
               MOVE "D" TO GRADE
           WHEN OTHER
               MOVE "F" TO GRADE
       END-EVALUATE.

なるお)あーあーあー、、、どこ行くのあの人。何言ってんのあの人。
どんだけ俺のできなさっぷりを舐めてんの!舐めんな言ってんのに!

靴紐結ぶときお腹のお肉が突っかかって結びづらいぐらいできない子なんだっての!
足の爪切るときお腹のお肉が突っかかって切りづらいぐらいできない子なんだっての

まったく…困ったもんだよ、あの人にも。

って、やらないと怒られる…怖い顔がもっと怖くなっちゃう。
パワハラじゃなくて顔ハラなんだよなー。顔ハラってなんなんだよ。

新章突入:EVALUATEは“判断をまとめる”魔法陣

ま、いいや…で、なんだってー、、、

EVALUATE TRUE

はい!わかりません!
やってないこと置いていくとか、ほんと嫌がらせ王3世だよ!

絶対わざとだ、あの人わざとだから。
帰ってきたら、怒る気まんまんじゃん。怒鳴り散らそうとか思ってんじゃないの?

なんなの?娘に邪険にされたからその仕返し?もっと強くなってよパパ。味方になってあげてよママさん…

…否!未来永劫否!
このCOBOLの申し子たる俺ならわかるはずなのだ!

コードから考えると、、、条件分岐系?だよね…多分。

WHEN SCOREの点数によって成績を自動でつけるシステムだと。

90点以上だと、グレードにAを入れる
80点以上だと、グレードにBを入れる
70点以上だと、グレードにCを入れる
60点以上だと、グレードにDを入れる
それ以外だと、グレードにFを入れる

それで終わり!

良し、アイス休憩!

(休憩後…)

な)って、ことです!完璧でしょ!すげーでしょ!

係)では、

EVALUATE TRUE

ってなんですか?

WHEN

ってなんですか?

な)えと…えー…、ま、そのー、そんなの覚えなくていい!気にすんな!
ということで…?

係)はぁ…
お前、取引先にもそうやって説明する気なのか?

別に俺は調べんなとはいってないんだがな。

な)はい…
(ふざけたいけどめちゃくちゃ怒られそうで抑えてる)

係)まぁいい。教えてはないからな。

だったらやるぞ。

EVALUATE。

見た目は英語の「評価する」だが、COBOLでは“判断をまとめる”命令だ。

「もし〜なら」「その次は〜なら」ってIFをダラダラ重ねる代わりに、ひとまとめにして読みやすくする。

だから、これを使えるようにならないと、COBOLは一生地獄になるぞ。

EVALUATE TRUE
 WHEN 条件1
  処理1
 WHEN 条件2
  処理2
 WHEN OTHER
  その他の場合の処理
END-EVALUATE

この形、見ただろ。

“TRUE”ってのはな、「常に真の状態で評価する」って意味だ。

つまり、上から順番に条件を見て、最初に当てはまったとこで止まる

お前が言っていたのは、内容自体は正しい。

ただな「なぜEVALUATE TRUEで書くのか」を説明できなきゃ話にならん。

IF地獄とネスト崩壊:EVALUATEが生まれた理由

IFを並べると

IF SCORE >= 90
   MOVE "A" TO GRADE
ELSE IF SCORE >= 80
   MOVE "B" TO GRADE
ELSE IF SCORE >= 70
   MOVE "C" TO GRADE
ELSE
   MOVE "F" TO GRADE
END-IF

ネスト地獄だ。

見てるだけで肩がこる。お前のエクセルマクロと同じだな。

な)決めつけ!?

係)EVALUATEを使えば、こうだ。

な)(あ、無視…)

係)どうだ?

EVALUATE TRUE
   WHEN SCORE >= 90
      MOVE "A" TO GRADE
   WHEN SCORE >= 80
      MOVE "B" TO GRADE
   WHEN SCORE >= 70
      MOVE "C" TO GRADE
   WHEN OTHER
      MOVE "F" TO GRADE
END-EVALUATE

スッキリしただろ?

COBOLは“読めるように書く”言語だ。

EVALUATEはその思想の象徴みたいなもんだ。

な)うー、でもそんなに大きくは変わらないような気がしないでもなくもないわけでもないぐらい?

係)……お前、今なんつった?

「そんなに大きくは変わらないような気がしないでもなくもないわけでもない」?

長ぇよ。COBOLより読みにくいわ。

…まぁいい。気持ちはわかる。

確かに、やってること自体は同じ条件分岐だし、結果も同じだ。

だけどな、“読むやつの負担”が全然違うんだ。

たとえば、IFが5段、10段って重なってるコード見たことあるか?

インデント地獄で、どのEND-IFがどのIFのペアかわからなくなる。

Excelで「IF(IF(IF(IF(」ってなったときの地獄、覚えてるだろ?

あれがCOBOLでも起こる。

読むだけで寿命が縮むぞ。

な)あー

読む人を救う構文:100人の肩こりを防ぐ書き方

係)でもEVALUATEなら、1本の木の枝を上から下にたどるように読める。

しかも、「最初に当てはまったものだけ実行して終わり」ってルールが明確だ。

COBOLってのはな、100人が読んで100人が理解できることを優先する言語だ。

動けばいい、じゃない。

“読めること”が正義。

だからEVALUATEは、見た目が少し楽になるだけじゃない。

“読む思考の軸”ができる。

な)読めることっすか…

係)そうだ、さっきの「EVALUATE」もお前に教えてなかったけど、読めただろ?

そういうことだ。

書くやつは1人。

読むやつは100人。

だからEVALUATEの一行で、100人の肩こりを救える。

おむすび

な)規模ちっさ…

係)お前も大概小さいだろうが。
器も心も度量も志も。

そして身長も。

な)うっさい…

係)腹だけはでかいけどな。

な)ほんとうっさい…

係長のワンポイント

EVALUATE TRUE は「上から条件を順番に評価して、最初に当てはまった1つだけを実行する」仕組みだ。
IF を重ねるネスト地獄を避けるための“読みやすさ優先”の分岐構文だと思え。
WHEN は「この条件にマッチしたらここを走れ」という枝分かれのラベル。
WHEN OTHER は“どれにも当てはまらなかった最後の受け皿”で、必ず書くのが作法だ。
100人が読むCOBOLでは、分岐はEVALUATEで一本の流れにしておくのが正解だ。

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

この記事を書いた人

コメント

コメントする