1. 導入:なぜ「EVALUATEの算術式」が重要なのか
COBOLの現場では、複雑な条件分岐に遭遇することが多々あります。特に、計算結果に基づいた処理の振り分けを行う際、IF文をネストさせたり、作業領域(WORKING-STORAGE)に一時的なフラグ変数を定義して値をセットしたりしていませんか?
今回紹介する「EVALUATE文のSubjectに算術式を直接記述する」テクニックを使えば、中間変数を用意する手間を省き、コードの可読性を劇的に向上させることができます。論理と計算を一体化させることで、バグの温床となる「変数の使い回し」を避けることができるのです。
2. 基礎知識:EVALUATE文の構成要素
EVALUATE文は、他の言語でいうところの「switch文」や「case文」に相当する構造化制御構文です。
この文の先頭部分を「Subject(評価対象)」と呼びます。通常は単一のデータ項目を指定することが多いですが、COBOLの仕様ではここに算術式(A + B など)を記述することが可能です。
これにより、特定の変数に値を代入して評価するのではなく、その場で計算した結果を直接、WHEN節の条件と比較できるようになります。
3. 実装・解決策:計算結果をそのまま判定の鍵にする
実装のポイントは「計算式の結果を直接評価する」という発想です。
例えば、残高と入金額の合計が特定の閾値を超えたかどうかを判定したい場合、わざわざ合計用の変数を用意する必要はありません。EVALUATEの直後に計算式を書くことで、コードの行数を削減し、ロジックの意図を明確にできます。
4. サンプルプログラム
以下のコードは、単価と数量から合計金額を算出し、その結果に基づいて処理を分岐させる例です。
<コード例>
IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-UNIT-PRICE PIC 9(5) VALUE 100.
01 WS-QUANTITY PIC 9(3) VALUE 5.
PROCEDURE DIVISION.
> 計算結果(単価×数量)を直接評価対象にする
EVALUATE WS-UNIT-PRICE WS-QUANTITY
WHEN 0 THRU 499
DISPLAY ‘小口注文です。’
WHEN 500 THRU 999
DISPLAY ‘中口注文です。’
WHEN 1000 THRU 9999
DISPLAY ‘大口注文です。’
WHEN OTHER
DISPLAY ‘範囲外の金額です。’
END-EVALUATE.
GOBACK.
5. 応用・注意点:現場で陥りやすい罠
非常に便利なテクニックですが、いくつか注意点があります。
・計算式の複雑化を避ける
EVALUATEのSubjectに書く式が複雑すぎると、かえって可読性が低下します。四則演算程度にとどめ、複雑な関数呼び出しや重い計算は、事前に計算用変数へ代入しておくのが「保守しやすいコード」の鉄則です。
・比較対象の型に注意
WHEN節で指定する定数の型と、計算結果の型が一致しているか確認してください。意図しない暗黙的な型変換が発生すると、計算精度や比較結果に影響を与える可能性があります。
・デバッグのしやすさ
もしEVALUATEの条件分岐が期待通りに動かない場合、計算式の結果が何になっているのか、デバッガやDISPLAY文で確認する必要があります。計算式を直接書くと、途中の計算値を確認する手間が増えるケースもあるため、ロジックが複雑な場合は、あえて変数に代入するスタイルと使い分けるのがベテランの判断です。
この書き方をマスターして、よりシンプルで美しいCOBOLプログラムを目指しましょう!

コメント