【COBOL 読み2-2-1】EVALUATE祭り逆走〜できない子は覚醒せず、残念!

🧩今日の学び
EVALUATE変数は“値を=で比較するだけ”という最もシンプルな分岐構文
TRUE版より複雑な条件は書けないが、読みやすさと安全性が段違い
・「値で分類するときはTRUEではなくEVALUATE変数」を使うのがCOBOL流

ほれ、今日のコードだ。

EVALUATE GRADE
   WHEN "A"
      MOVE "Excellent" TO REMARK
   WHEN "B"
      MOVE "Good" TO REMARK
   WHEN "C"
      MOVE "Fair" TO REMARK
   WHEN "D"
      MOVE "Poor" TO REMARK
   WHEN OTHER
      MOVE "Retry" TO REMARK
END-EVALUATE.

係)昨日は「点数からグレード(評価)を出す」だったな。

今日はその逆、「グレードから評価コメントを出す」。

な)え、逆走してるじゃないっすか。
点数違反ですよ、課長に報告しておきましょうよ。

オジキ…俺ヤッちまいましたよ。
しかし、俺にはもう戻る道なんてないんすよ。
このまま進みますんで、後のことは頼んます。
なるおに俺の財産を全部与えてやってください。

もう下書きは済んでますよ。

一太郎の方がいいですか?

係)一太郎かどうかじゃなく、なんで俺がお前に財産渡すんだよ。お前が授業料払え。

な)…アイス食います?

係)なんで授業料がアイスなんだよ、いちいちノッてくるな!ったく。

いいか、お前の頭が“片道しか走れない道路”だから往復運転の練習するんだよ。

な)…皮肉がストレートすぎて、皮肉になってませんよ…悪口ですよ。

係)そりゃ悪くも言いたくなるわ。

だからいいんだよそんなことは。

値ベースのEVALUATE:1つの値から分類する読み方

昨日の EVALUATE TRUE は “いくつかの条件を順に確認”する形だった。

でも今回は “ひとつの値を比べて分岐” する形だ。

つまりこういうことだ

EVALUATE TRUE「いろんな条件」を上から順にチェック。
EVALUATE 変数名→「1つの値」に対して分類する。


な)つまり、昨日はEVALUATE TRUEだったから、“いろんな条件を評価”、今日はEVALUATE 変数“ひとつの値で分類”…ってことすね?

係)その通り。COBOL界でいうところの「中間管理職と総務課の違い」だな。

な)なんで管理職と総務課なんすか。
総務課長はどっちですか。
うちの管理職は総務課レベルだっていう係長の皮肉ですか?

係)お前な…俺をどんだけ貶めたいんだ?

いいか、前者は全部の問題に顔出す。後者は自分の管轄だけ見る、という意味だ。
お前はどっちになりたい?

な)……帰りたいです。

係)だったら、退職願だせっての。

このコードを“口で説明”できるまで、帰さないからな。

な)は!?うそでしょ!?

係)“読むこと”を覚えたお前に必要なのは“言葉で出すこと”だ。

考えて説明してみろよ。

な)係長知ってました?

できないことはできるようにはならないんですよ?
やればできる子はやらないからできない子なんですよ?
いつまでもやらないんですよ?やると決めてもやらないんですよ?

係)大丈夫だ。

な)え…係長…そんなに俺を信じて…?

係)お前がどれだけできなくても、俺の給料には変わりないしな。

な)おちゃめな部下を見放さないでえええ!

係)このあと、お前は「EVALUATEの中身を“値ベースで考える”」に苦しみながらも、“COBOLの構文を日本語のように読む”という本質に近づいていくんだぞ。

いいな。

WHENの正体:『=』だけで成立する世界

な)なんかかっこいいこと言ってる風だったけど…あの人自分に酔ってるだけでしょ…
もともと酔っ払いみたいなもんだしね。スキットル胸ポケットに入ってるでしょ。トイレ行くふりしてスキットルにスピリタス注いでるでしょ。

それって酔っ払うレベルじゃないよね…

EVALUATE GRADE
   WHEN "A"
      MOVE "Excellent" TO REMARK
   WHEN "B"
      MOVE "Good" TO REMARK
   WHEN "C"
      MOVE "Fair" TO REMARK
   WHEN "D"
      MOVE "Poor" TO REMARK
   WHEN OTHER
      MOVE "Retry" TO REMARK
END-EVALUATE.

あれ?GRADEが変数なんだよな。話の流れ上。多分。
WHENAだったら、REMARKExcellentを入れる。

ということは、変数宣言にしちゃうと、WHENの条件=変数(GRADE)になっちゃうということ。

つまり変数にすると=は使えないけど、=としてはサクサク使えるってこと?

だったら、とどのつまりとして、短くできちゃうと。セイウチのつまりとして。

おむすび

でもなぁ…今のマシーンでコードを短くしてもどうなんだろうね。
当時だったら、しゃーないしゃーない!わっしょいわっしょい!ってことかしら。
鉛筆でそこら辺の壁で計算したほうが速いような。

なんでおじさんは鉛筆舐めるの?炭素うまいの?黒くなるって…
あーだから腹黒いのか。なっとくなっとく。

ちゅーことで、

短く書けて良かったね!って感じで!

さ、そんなことよりアイスアイス。

係長のワンポイント

EVALUATE 変数 は「その値とWHENの値を順に“=で比較する”だけ」のシンプル分岐だ。
TRUE版と違い、複雑条件は書けないが、そのぶん読みやすさと安全性が段違い。
WHEN "A" のように“値だけ書く”のは、比較対象がGRADEと決まっているからだ。
WHEN OTHERは“どの値にも一致しなかった時の最終処理”で必ず入れるのが作法。
値で分類したい時はTRUEではなくEVALUATE変数──これがCOBOLの正しい使い分けだ。

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

この記事を書いた人

コメント

コメントする