1. 導入:なぜEVALUATE … ALSO句が重要なのか
業務システム開発において、複数の条件を組み合わせた複雑な分岐処理は避けられません。従来、IF文を何重にもネストさせたり、フラグを細かく判定したりしていませんでしたか?それらの実装は可読性を著しく低下させ、保守時のバグの温床となります。EVALUATE … ALSO句を活用すれば、判定表(デシジョンテーブル)のような形式で条件を記述できるため、ロジックの網羅性が一目で分かり、保守性に優れたコードを実現できます。
2. 基礎知識:ALSO句の仕組み
EVALUATE文は、単一の変数を評価するだけでなく、ALSO句を用いることで複数の変数を連結して評価できます。
EVALUATE句に指定した複数の項目を「選択主標」と呼び、WHEN句に指定した項目と上から順に比較を行います。すべての条件が一致した場合のみ、そのWHENブロックが実行されます。これは論理演算のAND条件を視覚的に並べるものと理解してください。
3. 実装と解決策
実装のポイントは、判定したい条件を「表」として捉えることです。縦軸に評価項目、横軸に各ケースの条件値を配置するイメージでコーディングします。特に、特定の条件を無視したい場合は「ANY」キーワードを組み合わせることで、さらに柔軟な条件判定が可能です。
4. サンプルプログラム
以下のコードは、会員ランクと決済方法の組み合わせによって手数料を計算する処理を想定しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RANK PIC X. > A:プレミアム, B:一般
01 WS-PAY-TYPE PIC X. > 1:カード, 2:振込
01 WS-FEE PIC 9(5).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
> サンプル値の設定
MOVE “A” TO WS-RANK.
MOVE “1” TO WS-PAY-TYPE.
> 複数の条件をALSOで連結して評価
EVALUATE WS-RANK ALSO WS-PAY-TYPE
- プレミアム会員かつカード決済
WHEN “A” ALSO “1”
COMPUTE WS-FEE = 0
- プレミアム会員かつ振込
WHEN “A” ALSO “2”
COMPUTE WS-FEE = 100
- 一般会員かつカード決済
WHEN “B” ALSO “1”
COMPUTE WS-FEE = 200
- 一般会員かつ振込
WHEN “B” ALSO “2”
COMPUTE WS-FEE = 300
- いずれにも該当しない場合の例外処理
WHEN OTHER
DISPLAY “エラー: 不正な条件です”
END-EVALUATE.
DISPLAY “手数料: ” WS-FEE.
STOP RUN.
5. 応用・注意点
注意点1:WHEN OTHER句の記述
EVALUATE文を使用する際は、必ずWHEN OTHER句を記述する習慣をつけてください。想定外のデータが混入した際、プログラムが意図しない動作をするリスクを防げます。
注意点2:ANYの活用
例えば「会員ランクに関わらず、特定の決済方法なら手数料を一律にする」といったケースでは、WHEN “A” ALSO “1” と書く代わりに、WHEN ANY ALSO “1” と記述することで、コード量を劇的に削減できます。
現場の知恵
ALSO句は最大で64個まで連結可能ですが、あまりに多く連結すると逆に可読性が下がります。3〜4個程度を目安に、それ以上になる場合はロジックそのものを見直すか、事前にフラグを判定する設計を検討しましょう。適切な粒度で利用することが、美しいCOBOLコードへの近道です。

コメント