COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
生徒
「COBOLで複数の条件を分岐させたいとき、どう書いたらいいですか?」
先生
「そういうときは、EVALUATE文という構文を使います。これがCOBOLの多岐選択に役立ちます。」
生徒
「EVALUATE文って難しそう……」
先生
「大丈夫。わかりやすい例で、基本から丁寧に見ていきましょう!」
1. EVALUATE文とは?
EVALUATE(エバリュエート)文は、COBOLで「条件がAならこれ、Bならあれ」という多岐選択(たきせんたく)をまとめて書ける命令です。複数の条件を1か所に集められるので、プログラムの流れが追いやすくなり、「どの条件で何をするのか」が見た目で分かりやすくなります。
イメージとしては、信号のようなものです。青なら進む、赤なら止まる、というように、条件に応じて行動を切り替えます。EVALUATE文を使うと、この「切り替え」をすっきり整理できます。
また、EVALUATEは英語で「評価する」という意味があり、条件をチェックして当てはまる処理を選び取る、という動きにぴったりの名前です。特にCOBOL初心者は、IF文を何重にも書くより、EVALUATEで整理するほうが読み間違いを減らせます。
初心者向け:EVALUATE文の超シンプル例
EVALUATE 信号
WHEN "青"
DISPLAY "進みます。"
WHEN "赤"
DISPLAY "止まります。"
WHEN OTHER
DISPLAY "注意して確認します。"
END-EVALUATE
やさしく解説:
・EVALUATEの後ろに「判定したいもの(変数)」を書きます。
・WHENで「この値ならこの処理」と並べていきます。
・どれにも当てはまらない場合はOTHERで受け止めると安心です。
・最後は必ずEND-EVALUATEで閉じます。
2. 基本の書き方
まずは、基本的なEVALUATE文の構造を押さえましょう。EVALUATEは「ひとつの値(または条件)を見て、当てはまる処理を選ぶ」書き方なので、分岐が増えても形が崩れにくいのが特徴です。IF文を何段にも重ねるより、読み返したときに迷いにくくなります。
EVALUATE 学年
WHEN 1
DISPLAY "1年生です。"
WHEN 2
DISPLAY "2年生です。"
WHEN OTHER
DISPLAY "それ以外の学年です。"
END-EVALUATE
EVALUATEのあとにチェックしたい変数(ここでは学年)を書き、WHENで「この値ならこの処理」と分岐を並べます。上から順に見ていくイメージで、当てはまったところの処理が実行されます。
初心者向け:OTHERがあると安心な理由
EVALUATE 学年
WHEN 1
DISPLAY "1年生です。"
WHEN 2
DISPLAY "2年生です。"
WHEN OTHER
DISPLAY "想定外の値なので確認してください。"
END-EVALUATE
やさしく解説:
・OTHERは、どれにも当てはまらない場合の「最後の受け口」です。
・入力ミスや予想外のデータが来ても、何も起きずに終わるのを防げます。
・最後は必ずEND-EVALUATEで閉じると、範囲がはっきりして読みやすくなります。
3. 複数条件をまとめてチェック
EVALUATE文は、値の比較だけでなく、「条件式」そのものを並べて判定することもできます。ここでよく使うのがEVALUATE TRUEという書き方です。これは「TRUE(正しい)になったWHENを選ぶ」という意味で、IF文のようにANDやORを使った複数条件を、ひとまとめで整理できます。
初心者が助かるポイントは、条件が増えても「どの条件で、何を表示(処理)するのか」が見た目で追えることです。IF文を何段にも重ねると、どこで分岐しているのか迷いやすいですが、EVALUATEなら分岐の一覧がそのまま並びます。
EVALUATE TRUE
WHEN 学年 = 1 AND 成績 >= 80
DISPLAY "1年生で成績が良いですね!"
WHEN 学年 = 2 AND 成績 < 60
DISPLAY "2年生で要注意です。"
WHEN OTHER
DISPLAY "その他のパターンです。"
END-EVALUATE
初心者向け:ORを使った超シンプル例
EVALUATE TRUE
WHEN 成績 >= 90 OR 出席率 >= 90
DISPLAY "よく頑張りました!"
WHEN OTHER
DISPLAY "まずは基礎を固めましょう。"
END-EVALUATE
やさしく解説:
・EVALUATE TRUEは「WHENの条件が正しいかどうか」を順にチェックします。
・ANDは「両方OKなら」、ORは「どちらかOKなら」という意味です。
・どれにも当てはまらないときのために、OTHERを最後に置くと安心です。
・条件が増えても、分岐が1か所にまとまるので読み間違いを減らせます。
4. ネストせずにすっきり書けるメリット
たとえばif文で同じ処理を書くと、こうなります:
IF 学年 = 1 THEN
IF 成績 >= 80 THEN
DISPLAY "1年生で成績が良いですね!"
END-IF
END-IF
ネストが深くなると、読みづらくなりますが、EVALUATE文なら次のようにすっきり書けます。
EVALUATE TRUE
WHEN 学年 = 1 AND 成績 >= 80
DISPLAY "1年生で成績が良いですね!"
WHEN 学年 = 2 AND 成績 < 60
DISPLAY "2年生で要注意です。"
WHEN OTHER
DISPLAY "その他のパターンです。"
END-EVALUATE
5. 多岐条件とOTHERSの使い分け
WHEN句には複数の値を並べることもできます:
EVALUATE 成績
WHEN 80 THRU 89
DISPLAY "8割台です。"
WHEN 90 THRU 100
DISPLAY "90点以上!すごい!"
WHEN 0 THRU 59
DISPLAY "再テストになるかもしれません。"
WHEN OTHER
DISPLAY "成績が範囲外です。"
END-EVALUATE
THRUは「〜から〜まで(範囲)」を表すキーワードです。範囲を指定できるので、コードがすっきりします。
6. 実行結果のイメージ
たとえば学年=1かつ成績=85なら、次のように表示されます:
1年生で成績が良いですね!
学年=3なら「その他のパターンです。」と表示されます。
7. EVALUATE文の注意ポイント
END-EVALUATEを忘れず書く。WHENごとに処理をまとめるが、順番に評価される。OTHERやOTHERSはどれにも当たらないときの最後の受け口。- 複数条件は
ANDORを使い、範囲はTHRUを使う。 - 初心者には、まずは簡単なWHEN句から始めて、慣れてきたら複雑な条件に挑戦すると◎。
まとめ
ここまで、COBOLのEVALUATE文について、さまざまなパターンを使いながらゆっくりと確認してきました。初心者にとって、条件分岐はどうしても複雑に見えてしまうところですが、EVALUATE文を使うことで、長い分岐や深い入れ子を避けながら、すっきりと読みやすい形で記述できるようになります。とくに、学校の成績や学年のように段階的な値を扱う場合、EVALUATE文はとても自然な書き方になり、プログラムの意図がそのまま読み取れるところが大きな長所です。この見通しのよさは、長年にわたり多くの業務システムを支えてきたCOBOLらしい特徴であり、現場で維持され続けてきた理由でもあります。 たとえば、成績という値が〇〇以上か〇〇未満か、範囲で判定したい場面は業務で数えきれないほど存在します。売上、点数、数量、年齢、レベル、会員ランクなど、数字の大小や幅で判断する処理は毎日のように発生します。そうした状況で複雑なIF文をいくつも重ねてしまうと、あとから見返す人にとって理解しづらくなり、ミスの原因にもなります。ところが、EVALUATE文を使って範囲を指定すれば、「八十点台」「九十点以上」「六十点未満」といった表現そのものがソースに現れるため、読む人が考える負担を減らせます。このような書き方の違いは、初心者が気づきにくい部分ですが、毎日見るものだからこそ効果が大きくなります。 さらに、EVALUATE文にはTRUEを使った条件式という書き方もあります。この方法は、単純な値の比較だけではなく、複数の判定をまとめて扱いたいときに便利です。たとえば学年と成績を組み合わせて「一年生で八十点以上なら褒め言葉」「二年生で六十点未満なら注意メッセージ」というように、二つの条件を自然な文章のように結びつけることができます。しかも、処理が増えてもWHEN句を横に足していくだけなので、ネストが深くなることはありません。条件が増えれば増えるほど、EVALUATE文の読みやすさは際立っていきます。 また、EVALUATE文にはOTHERやOTHERSという受け皿が用意されているため、当てはまらない場合の処理を書き忘れたままになりにくいところも安心感があります。とくに、業務システムでは想定外のデータが入る可能性があるため、「どれにも当てはまらなかったらエラーや注意を表示する」という仕掛けはとても重要です。こうした下支えの仕組みが整っているからこそ、COBOLは長期間安全に運用されてきました。 では、ここでもう一度EVALUATE文の全体像を確認するために、まとめとして簡単なサンプルを示します。
IDENTIFICATION DIVISION.
PROGRAM-ID. EVALUATE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GRADE PIC 9.
01 SCORE PIC 9(3).
PROCEDURE DIVISION.
MOVE 1 TO GRADE
MOVE 92 TO SCORE
EVALUATE TRUE
WHEN GRADE = 1 AND SCORE >= 80
DISPLAY "一年生で成績が良いです。"
WHEN GRADE = 2 AND SCORE < 60
DISPLAY "二年生で要注意です。"
WHEN SCORE THRU 100
DISPLAY "点数が範囲内です。"
WHEN OTHER
DISPLAY "該当しない条件です。"
END-EVALUATE
STOP RUN.
この例では、学年と点数の組み合わせに応じて自然な文のように処理が分かれています。もし同じことをIF文で書こうとすると、学年のIF、点数のIF、範囲のIFが重なり、途中でEND-IFを間違えたり、対応関係が分からなくなってしまうおそれもあります。しかしEVALUATE文なら、分岐が階段のように並ぶため、縦に読み進めるだけで全体の流れを追うことができます。初心者でも理解しやすく、経験者にとっても安心して保守できる形が整っています。 こうした読みやすさは、プログラムが人の目で確認されることを前提にしてきたCOBOLらしい考え方です。業務システムの世界では、ゆっくり確実に動き続けることや、担当者が変わっても理解できるコードであることが重視されます。だからこそ、EVALUATE文のような整った選択構文が、長い年月にわたって使われ続けています。どのような場面で使うのがよいかを思い浮かべながら、実際のサンプルを自分で書いてみると、いっそう理解が深まるはずです。 また、EVALUATE文は数値だけでなく文字列にも使えます。たとえば処理区分や種別コードを判定するとき、定義された値を並べてWHEN句の中に書けば、そのまま分岐テーブルのような役割を果たします。さらに、業務ごとに使われるコードが増えても、WHEN句を足すだけで対応でき、既存の記述を壊さずに拡張できます。これは、長く使われるシステムでとても大切な性質です。 もちろん、どんなに便利でも書き忘れがないわけではありません。END-EVALUATEを忘れてしまうとコンパイルエラーになったり、範囲を閉じるTHRUの指定を間違えると意図しない挙動につながります。だからこそ、ゆっくり確認しながら少しずつ慣れていくことが大切です。焦らなくても、ひとつひとつの構文を正しく使えるようになれば、業務プログラムも問題なく書けるようになります。 このように、EVALUATE文を学ぶことは、ただ文法を覚えるだけではありません。値の範囲、複数条件、例外の受け皿、見通しのよさ、保守のしやすさ、現場の読みやすさといった、実際の現場で求められる考え方を身につける第一歩になります。これから先、COBOLのファイル処理やデータベース連携、帳票出力などへ進んでいくと、分岐の多い処理が増えていきます。だからこそ、早い段階でEVALUATE文をしっかり体で覚えておくと、自信をもって開発に取り組めるようになります。 もし今後、自分のプログラムを人に見せる機会があれば、ぜひ「見やすいコード」になっているかを意識してみてください。分岐のまとまりが整っているだけで、読み手の感じる負担は大きく変わります。読みやすいということは、それだけ誤解が少なくなるということです。そして誤解が減れば、ミスも減ります。プログラムは正しく動くだけでなく、正しく理解されることがとても大切です。その点で、EVALUATE文は強い味方になります。
生徒
「先生、EVALUATE文って思っていたよりもすごく便利なんですね。IF文よりも読みやすくて、なんだか安心できます。」
先生
「その通りですよ。読みやすさは、プログラムの正しさにもつながる大事な要素です。」
生徒
「しかも、範囲で判定できたり、当てはまらないときの受け皿まで用意できたり、現場で必要になりそうな機能がそろっているんですね。」
先生
「ええ。COBOLは長年使われている言語だからこそ、業務に合わせた書き方が多く用意されています。」
生徒
「これから他の処理を書くときも、まずIFではなくEVALUATEで書けないか考えてみようと思います。」
先生
「いい心がけですね。自分で書いたコードをあとから読み返すと、EVALUATEの良さを実感できるはずです。」