COBOLにおけるEVALUATEとは|EVALUATE文の使い方

COBOLにおけるEVALUATE
今回は、金融業界などで多々使われているプログラミング言語「COBOL」における、EVALUATE文について紹介します。
英語で 「evaluate」とは、「査定する、評価する」といった意味の英単語です。しかし、プログラミング言語で「査定」と言われてもピンとこない方は多いのではないでしょうか。
この言葉は、プログラミング言語の中でも、COBOLにおいて、IF文と深い関わりがあるキーワードとして利用されています。
本記事では、COBOLのEVALUATE文について詳しく紹介して行きますので、興味のある方はぜひご覧ください。
EVALUATEとは?
ここからは、EVALUATE文について紹介します。結論から言うと、EVALUATEとは、複数に条件分岐するために用いるキーワードです。
早速、実際のソースコードを見てみましょう。
EVALUATEは条件分岐の方法
EVALUATE文を用いたソースコードはこのようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
IDENTIFICATION DIVISION.
PROGRAM-ID. simple_evaluate_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC 99 VALUE 13.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
EVALUATE num
WHEN 10
DISPLAY “num is 10”
WHEN 13
DISPLAY “num is 13”
WHEN OTHER
DISPLAY “num is other”
END-EVALUATE.
STOP RUN.
END PROGRAM simple_evaluate_program.
|
基本的なEVALUATE文を用いたコードはこの様になっています。このプログラムは、変数numに10が入っていれば「num is 10」と、13が入っていれば「num is 13」と、それ以外が入っていた場合は「num is other」と表示されるようになっています。
このように、シンプルな使い方としては、
1
2
3
4
5
6
|
EVALUATE (判定する変数)
WHEN (変数の値)
(処理)
END-EVALUATE.
|
と書くことが出来ます。これは、ある変数の値を判定して、WHENの直後にある値と一致していたら、その後ろに書かれている処理を実行する構文になっています。
IF文との使い分け
COBOLにおいて、IF文もEVALUATE文も、条件分岐するための構文です。そのため、IF文とEVALUATE文は、分岐する数によって使い分けることが必要です。
IF文は2つ、または3つに分岐する場合にのみ利用するようにしましょう。もちろん、4つ以上に分岐する場合でも、IF文で書くことは可能ですが、非常に見にくくなってしまいます。
まずは、IF文で書いたプログラムを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
IDENTIFICATION DIVISION.
PROGRAM-ID. difficult_if_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC X(2).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
ACCEPT num FROM CONSOLE.
IF num = 1 THEN
DISPLAY “1が押されました。”
ELSE IF num =2 THEN
DISPLAY “押されたキーは2です。”
ELSE IF num = 3 THEN
DISPLAY “3でした。”
ELSE IF num = 4 THEN
DISPLAY “4を押しましたね?”
ELSE
DISPLAY “1~4の数字を入力してください”
END-IF
END-IF
END-IF
END-IF.
STOP RUN.
END PROGRAM difficult_if_program.
|
これは、入力された1~4の数字に基づいて、別々のメッセージを表示させるプログラムです。
これと同様のプログラムを、EVALUATE文を用いて作成すると、このようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
IDENTIFICATION DIVISION.
PROGRAM-ID. easy_evaluate_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC X(2).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
ACCEPT num FROM CONSOLE.
EVALUATE num
WHEN 1
DISPLAY “1が押されました。”
WHEN 2
DISPLAY “押されたキーは2です。”
WHEN 3
DISPLAY “3でした”
WHEN 4
DISPLAY “4を押しましたね?”
WHEN OTHER
DISPLAY “1~4の数字を入力してください”
END-EVALUATE.
STOP RUN.
END PROGRAM easy_evaluate_program.
|
IF文を用いたプログラムは文字数や行数も多く、またEND-IFもたくさん書かれており、読みにくいコードとなっています。対して、EVALUATE文を用いたプログラムでは、全体的にすっきりしており、読みやすいプログラムとなっています。
このように、複数に分岐する場合は、IF文ではなくEVALUATE文を用いると合理的です。
他のプログラミング言語では?
ここまでCOBOLのEVALUATE文について見てきました。ここで、「EVALUATE文の代わりにswitch文を用いる」「eval関数には注意」といった内容から他の言語との関係性について、すこし説明します。
EVALUATE文の代わりにswitch文を用いる
COBOLにある、同じく条件分岐を行うための「IF」というキーワードは、他のプログラミング言語でも、キーワードとして登録されていることが多い言葉です。
一方の「EVALUATE」は、COBOLを含むいくつかのプログラミング言語でしか、キーワードとして利用することが出来ません。
COBOLにおけるEVALUATE文と似たようなことを他のプログラミング言語で実現するには、switch文を利用します。
この記事の「EVALUATEは条件分岐の方法」の節で、変数numが10、13、それ以外で場合分けし、それぞれメッセージを表示するプログラムを見てきました。これを、JavaScriptで再現すると、このようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var num = 13;
switch (num) {
case 10:
console.log(“num is 10”);
break;
case 13:
console.log(“num is 13”);
break;
default:
console.log(“num is other”);
}
|
上記のように、EVALUATEの代わりにswitchを、WHENの代わりにcaseを用いています。JavaScriptは、WEBページに動きをつけるために、広く利用されているプログラミング言語ですが、JavaやPHP、C言語などの有名なプログラミング言語でも似たような構文が存在しています。
eval関数には注意
evaluateは、はじめにも書いた通り、「査定する、評価する」という意味の英単語です。
COBOLにはありませんが、これを縮めた「eval」という構文を持つプログラミング言語もあります。その代表例が先程も出てきたJavaScriptです。
1
2
3
4
|
var num=13;
eval(“console.log(num)”);
|
これはJavaScriptのソースコードですが、「eval」というキーワードが登場しているのが見て分かるでしょう。
これは、与えられた文字列をプログラムとして解釈し、実行する、というキーワードです。
このように、同じevaluateという英単語に由来するキーワードですが、COBOLにおけるEVALUATEと、他のプログラミング言語におけるevalは全くの別物なので、注意してください。
便利なEVALUATE文の使い方
ここからは、COBOLにおけるEVALUATE文のもっと便利な使い方を紹介していきます。とはいえ、以下のような基本の構文を理解した上であれば、何も難しいことはありません。
1
2
3
4
5
6
|
EVALUATE (判定する変数)
WHEN (変数の値)
(処理)
END-EVALUATE.
|
範囲の指定
EVALUATE文では、WHENのあとに書かれる「変数の値」に、範囲で指定することが出来ます。例えば、現在の日付を取得し、春夏秋冬のどれに当たるのかを判定するプログラムを作ってみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
IDENTIFICATION DIVISION.
PROGRAM-ID. season_check_program.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 now.
03 ymd PIC 9(6).
03 yxx PIC 99.
03 xmd PIC 9(4).
03 mon PIC 99.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
ACCEPT ymd FROM DATE.
DIVIDE 10000 INTO ymd GIVING yxx REMAINDER xmd.
DIVIDE 100 INTO xmd GIVING mon.
DISPLAY “現在の季節は...”
EVALUATE mon
WHEN 3 THRU 5
DISPLAY “春です。”
WHEN 6 THRU 8
DISPLAY “夏です。”
WHEN 9 THRU 11
DISPLAY “秋です。”
WHEN OTHER
DISPLAY “冬です。”
END-EVALUATE.
STOP RUN.
END PROGRAM season_check_program.
|
このプログラムで「DISPLAY “現在の季節は…”」より上は現在の月を取得して、変数monに格納しています。このように、WHENの後ろに、「 (数値) THRU (数値) 」と入力することで、その数の間に含まれる値をすべて指定することが出来ます。
処理の合流
EVALUATE文では、WHEN (変数の値)の後ろに続けてWHEN (変数の値)を書くことも出来ます。こうすることで、処理を合流させることが出来ます。次のプログラムを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
IDENTIFICATION DIVISION.
PROGRAM-ID. evaluate_program2.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num PIC XX.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY “5以下の自然数を入力してください。”.
ACCEPT num FROM CONSOLE.
EVALUATE num
WHEN 1
WHEN 3
WHEN 5
DISPLAY num “は奇数です。”
WHEN 2
WHEN 4
DISPLAY num “は偶数です。”
WHEN OTHER
DISPLAY “正しく入力してください。”
END-EVALUATE.
STOP RUN.
END PROGRAM evaluate_program2.
|
5以下の自然数を入力し、それが偶数なのか奇数なのか判定するプログラムです。このプログラムでは、WHEN節を続けて書くことで、処理を合流させています。
EVALUATEを上手く利用しよう
いかがでしたでしょうか。COBOLにおけるEVALUATEを用いた条件分岐の方法を説明してきました。IF文と違いEVALUATE文は、より多くの条件分岐を行う際に、コードが見やすくなるなど、有用な構文です。
ここで紹介したソースコードを書いたり、実際に実行してみたりして、理解を深めてください。
FEnetを運営しているネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


COBOL新着案件New Job
-
活動基盤システムの運用保守/東京都中央区/【WEB面談可】/在宅勤務/20代~30代の方活躍中
年収396万~576万円東京都中央区(水天宮前駅) -
メインフレームシステム設計構築のテスター/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収300万~420万円神奈川県横浜市(市ヶ尾駅) -
メインフレームシステム運用/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収600万~720万円神奈川県横浜市(市ヶ尾駅) -
メインフレームシステム設計構築/COBOL/神奈川県横浜市/【WEB面談可】/リモート対応可/20代~40代の方活躍中
年収720万~840万円神奈川県横浜市(市ヶ尾駅) -
共通基盤更改に伴うサーバ運用保守/Apache/東京都品川区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/リモート対応可
年収420万~600万円東京都品川区(品川駅) -
上流システムエンジニア・PL/Unix/東京都港区/【WEB面談可】/リモート対応可
月給45万~55万円東京都港区(品川駅)