本文へスキップ
BecomeCoder

COBOLコース · 第4章 基本の命令 ― MOVE・演算・条件分岐 · レッスン23

EVALUATE文 ― 多分岐をすっきり書く(switch相当)

ブラウザで完結

導入

前のレッスンの最後で見たとおり、IFのネストは条件が増えるほど読みにくくなります。この問題を解決するのが EVALUATE文 です。多くの言語の switch 文に相当し、複数の条件をフラットに、見通しよく書けます。

説明

       01  WS-SCORE             PIC 9(3)     VALUE 85.
       01  WS-GRADE             PIC X(1).

       PROCEDURE DIVISION.
           EVALUATE TRUE
               WHEN WS-SCORE >= 90
                   MOVE "S" TO WS-GRADE
               WHEN WS-SCORE >= 70
                   MOVE "A" TO WS-GRADE
               WHEN WS-SCORE >= 50
                   MOVE "B" TO WS-GRADE
               WHEN OTHER
                   MOVE "C" TO WS-GRADE
           END-EVALUATE.

           DISPLAY WS-GRADE.
      *>  結果: A(WS-SCOREは85なので、最初に真になる WHEN WS-SCORE >= 70 が実行される)
  • EVALUATE TRUE … 「TRUE と一致するものを探す」という書き方をすることで、各 WHEN独立した条件式を書けるようにしています(実務でよく使われる定番パターンです)。
  • WHEN 条件 … 上から順に評価され、最初に一致した節だけが実行されます(前のレッスンの IFネストと同じ「最初の一致で確定」という考え方)。
  • WHEN OTHER … どの条件にも一致しなかったときの、いわば「それ以外すべて」の受け皿。
  • END-EVALUATE. … EVALUATE文の終わり。

EVALUATE は「1つの値」を複数の値と比較する、素直な使い方もできます。

           EVALUATE WS-GRADE
               WHEN "S"
                   DISPLAY "特に優秀です"
               WHEN "A"
                   DISPLAY "優秀です"
               WHEN "B"
                   DISPLAY "合格です"
               WHEN OTHER
                   DISPLAY "再試験が必要です"
           END-EVALUATE.

さらに、WHEN には複数の条件をカンマ区切りで並べることも可能です(例: WHEN "A", "B")。深いネストになりがちな多分岐は、まずEVALUATE文で書けないかを検討する——これが読みやすいCOBOLコードの定石です。

試すには

レッスン22で書いた「S・A・B評価」のIFネストを、EVALUATE文で書き直してみましょう。ネストがなくなり、条件が横一列に並ぶことで読みやすくなる感覚を確認してください。

実際に動かしてみよう

下のエディタにCOBOLを書いて「実行」を押すと、学習用シミュレータが DISPLAY の出力を表示します(本物のGnuCOBOLではなく、教材の範囲を再現した軽量エンジンです)。PICTURE句の桁数・ゼロ詰め・切り捨てなどCOBOLらしい挙動もそのまま体験できます。本文の例を書き換えて動かしてみましょう(ファイル処理やCALLなど一部の機能は対象外です)。

COBOL — ブラウザ内で実行(学習用シミュレータ)

COBOLの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGnuCOBOLではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。