【COBOL学習|初心者向け】COBOLのEVALUATE文を使いこなそう!「WHEN ANY句」で条件判定をスマートに

1. 導入:なぜWHEN ANY句が重要なのか

COBOLで複雑な条件分岐を書く際、EVALUATE文は非常に強力な味方です。しかし、複数の変数を組み合わせて判定する際、「この項目は値が何であっても処理したい」というケースが出てくることはありませんか?
そんな時に、わざわざ全ての値を網羅したり、IF文を入れ子にしたりするのは非効率です。ここで活躍するのがWHEN ANY句です。これを使うことで、コードの可読性を高め、メンテナンスしやすいプログラムを書くことができます。

2. 基礎知識:EVALUATEとALSOとANY

EVALUATE文は、複数の条件を一度に判定できる「多条件判定」が可能です。この時、ALSOというキーワードを使うことで、複数の項目を並べて判定できます。
そしてANYは、その名の通り「何でも良い(ワイルドカード)」を意味します。つまり、EVALUATE文の中で「この項目は値に関係なく、他の条件が合致していればOKとする」という指定が可能になるのです。

3. 実装・解決策:特定の軸を無視して条件をまとめる

例えば、年齢と性別で処理を分ける場合を考えましょう。「20歳なら性別を問わず同じ処理を行う」といった要件がある場合、WHEN ANY句を使うことで、性別の判定を省略してロジックをスッキリとまとめられます。これにより、条件漏れによるバグを防ぎやすくなります。

4. サンプルプログラム

以下のプログラムは、年齢と性別を判定し、年齢が20歳であれば性別に関わらず特定の処理を実行する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-ANY.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-AGE PIC 9(03).
01 WS-GENDER PIC X(01).

PROCEDURE DIVISION.
MOVE 20 TO WS-AGE.
MOVE ‘M’ TO WS-GENDER.

> 複数の条件をALSOで連結して判定
EVALUATE WS-AGE ALSO WS-GENDER
> 年齢が20なら性別(ANY)は問わず処理
WHEN 20 ALSO ANY
DISPLAY ’20歳の方ですね。性別に関わらず受付します。’

> 年齢が30、かつ性別が男性の場合
WHEN 30 ALSO ‘M’
DISPLAY ’30歳の男性ですね。専用コースへ案内します。’

WHEN OTHER
DISPLAY ‘該当する条件がありませんでした。’
END-EVALUATE.

STOP RUN.

5. 応用・注意点:現場で陥りやすいポイント

現場の保守でよくあるミスは、ANY句の順序です。EVALUATE文は記述された順番に上から判定されます。そのため、より細かい条件(特定の値)を上に、より広い条件(ANYを含むもの)を下に記述するのが鉄則です。
もしANYを使った条件を一番上に書いてしまうと、その後の細かい条件が無視されてしまう可能性があるため、条件の優先順位には細心の注意を払いましょう。このルールを守るだけで、バグのない美しいコードが書けるようになりますよ。

コメント

タイトルとURLをコピーしました