多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう! | 用語辞典

COBOL(コボル)言語の予約語EVALUATE、WHEN、END-EVALUATEを使った多岐分岐とは

辞典・辞書-EVALUATE-イメージ

COBOL(コボル)言語のEVALUATE~WHEN文とは?

EVALUATE(英語)は、日本語に訳すると「評価する」、WHEN(英語)は「いつ」という意味です。

COBOL(コボル)言語のEVALUATE~WHEN文は、WHENの値に一致するとWHEN以下の処理を実行します。

EVALUATE文の形式:EVALUATE~WHEN~END-EVALUATE

EVALUATE~WHEN~END-EVALUATEでは、評価対象がWHENの値に一致する場合に、WHENから次のWHEN、またはEND-EVALUATEの間に書かれた命令を実行します。

■書式

 EVALUATE  評価対象

  WHEN  値

     値に一致する場合に実行する命令群

  WHEN  値1  THRU  値2

     値1から値2に一致する場合に実行する命令群

  WHEN  OTHER

     どの値にも一致しない場合に実行する命令群

END-EVALUATE.

■構文規則

 <評価対象>

 評価する対象の文字定数、数字定数、またはデータ項目を記述します。

 <値>

 評価対象に一致する文字定数、数字定数、またはデータ項目を記述します。複数の値で同じ命令を実行する場合は、「WHEN 値」を連続して記述してください。

 <値に一致する場合に実行する命令群>

 評価対象が値に一致する場合に実行する命令を記述します。命令は複数でも単数でもかまいません。

 <値1、値2>

 評価対象が値1から値2の間になる文字定数、数字定数、またはデータ項目を記述します。

 <値1から値2に一致する場合に実行する命令群>

 評価対象が値1から値2の間の場合に実行する命令を記述します。命令は複数でも単数でもかまいません。

 <どの値にも一致しない場合に実行する命令群>

 評価対象がどの値にも一致しない場合に実行する命令を記述します。命令は複数でも単数でもかまいません。

■使用例則

 実際にEVALUATE~WHEN~END-EVALUATEを使用したプログラム例をご紹介します。

辞典・辞書-EVALUATE-使用例

このプログラムは、コンソールに入力を促すメッセージを表示し、数字の0から9までの1文字を入力させる処理を繰り返すプログラムです。数字の9が入力されると終了メッセージを表示しプログラムを終了します。また、数字以外が入力されるとエラーメッセージを表示します。

■実行結果

はじめに入力を促すメッセージが表示されます。

辞典・辞書-EVALUATE-実行結果

数字の0を入力してみます。

辞典・辞書-EVALUATE-入力例1果

入力を促すメッセージが繰り返し表示されます。

次に数字の8を入力してみます。

辞典・辞書-EVALUATE-入力例2

入力を促すメッセージが繰り返し表示されます。

次に英字のAを入力してみます。

辞典・辞書-EVALUATE-入力例3

エラーメッセージが表示され、入力を促すメッセージが表示されます。

次に数字の9を入力してみます。

辞典・辞書-EVALUATE-入力例4

終了メッセージが表示され、プログラムが終了しました。

EVALUATE文のCOBOL(コボル)言語における基本事項やルールについて

EVALUATE文はデータ項目の値によって多岐分岐ができる便利な命令です。しかし、WHENのあとに続く命令群が長すぎると、煩雑なプログラムになってしまいます。WHENのあとの命令群がたくさんある場合は、サブルーチン化し、PERFORM文で命令を実行させるようにしましょう。

COBOL(コボル)言語のEVALUATE文を使うときの注意点

EVALUATE文はIF文と同様に誰が読んでも理解できるシンプルな分岐にすることを心がけてください。WHENで100個にも多岐分岐するようなプログラムはデバッグが困難になります。

EVALUATE文を使ったCOBOL(コボル)プログラムの活用方法

EVALUATE文を使って、データ項目Aとデータ項目Bといった複数のデータ項目の値によって多岐分岐させたい場合があります。

データ項目Aとデータ項目Bそれぞれ何の値である場合はある処理を、さらにこの値ならばこの処理を…、全てに一致しなければこの処理をという場合は、ALSOを使います。

EVALUATE データ項目A ALSO データ項目B

 WHEN 100 ANY

  処理A

 WHEN 200 ALSO 10

  処理B

 WHEN OTHER

  処理C

 END-EVALUATE.

このテクニックを使って、2つの値を入力し、その値によって「いちご」、「りんご」、「ばなな」の品名を表示させるプログラムを作ってみましょう。1つ目の値が100の場合は「いちご」、1つ目の値が200、かつ2つ目の値が10の場合は「りんご」、それ以外の値の場合は「ばなな」です。

  1. ******************************************************************
  2. * Author:
  3. * Date:
  4. * Purpose:
  5. * Tectonics: cobc
  6. ******************************************************************
  7. IDENTIFICATION DIVISION.
  8. PROGRAM-ID. EVALUATE-SUMPLE2.
  9. DATA DIVISION.
  10. FILE SECTION.
  11. WORKING-STORAGE SECTION.
  12. 01 WORKING-AREA.
  13. * コンソール入力バッファ
  14. 03 CONSOLE-INPUT1 PIC X(3).
  15. 03 CONSOLE-INPUT2 PIC X(2).
  16.  
  17. PROCEDURE DIVISION.
  18. *-------------------------------------------
  19. * 主手続
  20. *-------------------------------------------
  21. MAIN-PROCEDURE.
  22. * コンソール入力エリアの初期化
  23. MOVE SPACE TO CONSOLE-INPUT1.
  24. MOVE SPACE TO CONSOLE-INPUT2.
  25.  
  26. EXEC-DISPLAY-INPUT-PROC.
  27. * コンソール表示&入力
  28. DISPLAY "大品目名を3桁で力してください".
  29. DISPLAY "100 or 200 or 300 EXIT:999".
  30. ACCEPT CONSOLE-INPUT1 FROM CONSOLE.
  31.  
  32. IF CONSOLE-INPUT1 = 999 THEN
  33.   DISPLAY "プログラムを終了します"
  34.   GO TO END-PROC
  35. END-IF
  36.  
  37. DISPLAY "小品目名を2桁で力してください".
  38. DISPLAY "10 or 20 or 30"
  39. ACCEPT CONSOLE-INPUT2 FROM CONSOLE.
  40.  
  41. EVALUATE CONSOLE-INPUT1 ALSO CONSOLE-INPUT2
  42.   WHEN 100 ALSO ANY
  43.   DISPLAY "品名は「いちご」です"
  44.   WHEN 200 ALSO 10
  45.   DISPLAY "品名は「りんご」です"
  46.   WHEN OTHER
  47.    DISPLAY "品名は「ばなな」です"
  48. END-EVALUATE.
  49. GO TO EXEC-DISPLAY-INPUT-PROC.
  50. END-PROC.
  51. STOP RUN.
  52. END PROGRAM EVALUATE-SUMPLE2.

はじめに大品目の入力を促すメッセージが表示されます。

辞典・辞書-EVALUATE-入力例1

数字の100を入力してみます。

辞典・辞書-EVALUATE-入力例2

小品目の入力を促すメッセージが表示されます。

数字の10を入力してみます。

辞典・辞書-EVALUATE-入力例3

品名「いちご」が表示され、入力を促すメッセージが繰り返し表示されます。

大品目に数字の200、小品目に数字の10を入力してみます。

辞典・辞書-EVALUATE-入力例4

品名「りんご」が表示され、入力を促すメッセージが繰り返し表示されます。

大品目に数字の300、小品目に数字の10を入力してみます。

辞典・辞書-EVALUATE-入力例5

品名「ばなな」が表示され、入力を促すメッセージが繰り返し表示されます。

次に数字の999を入力してみます。

辞典・辞書-EVALUATE-入力例6

プログラムが終了しました。

EVALUATE文には、EVALUATE文のよさがあり、上手く使えば、とてもスッキリとしたプログラムを書くことができます。しかし、分岐条件があまりにも多岐に渡る場合は、IF文と組み合わせるなどして、条件がシンプルになるような工夫も必要です。プログラムはシンプル・イズ・ベストであることを忘れないようにしましょう。

この記事を読んだ人は、こちらの記事も読んでいます

あなたのCOBOL技術を活かしませんか?

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

|  基礎  |  応用  |  勉強  |  試験 |  辞書  |

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門