導入
業務系システム開発において、複雑なビジネスロジックを実装する際、IF 文のネスト(入れ子構造)が深くなりすぎて可読性が著しく低下した経験はありませんか?いわゆる「スパゲッティコード」の温床となり、保守性を損なう大きな要因です。これを解決し、ロジックを平易かつ論理的に整理するための強力な武器が、EVALUATE TRUE を活用した条件分岐です。
基礎知識
通常、EVALUATE 文は「EVALUATE 変数名」のように比較対象を明示して使用しますが、EVALUATE TRUE と記述することで、後続の WHEN 句に「条件式」を直接記述することが可能になります。
これは、各 WHEN 句が順番に評価され、最初に「真(TRUE)」となったブロックのみが実行される仕組みです。他言語でいう「if – else if」の連鎖を、COBOL では表形式のようにスッキリと記述できるため、構造化プログラミングの観点から非常に推奨される書き方です。
実装/解決策
EVALUATE TRUE を使う最大の利点は、条件の順序をフラットに並べられることです。
1. 最初の WHEN 句から順に評価されます。
2. 条件が満たされたら、その WHEN ブロック内の処理を実行し、END-EVALUATE へ抜けます。
3. いずれも該当しない場合は、WHEN OTHER を使用して「それ以外」の処理を定義できます。
サンプルプログラム
以下は、売上金額に応じた手数料計算のロジックを想定したサンプルです。
IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SALES-AMOUNT PIC 9(7) VALUE 50000.
01 WS-COMMISSION PIC 9(7).
PROCEDURE DIVISION.
> EVALUATE TRUEを用いることで、論理的な順序で条件を記述できる
EVALUATE TRUE
WHEN WS-SALES-AMOUNT > 100000
COMPUTE WS-COMMISSION = WS-SALES-AMOUNT 0.10
WHEN WS-SALES-AMOUNT > 50000
COMPUTE WS-COMMISSION = WS-SALES-AMOUNT 0.05
WHEN WS-SALES-AMOUNT > 0
COMPUTE WS-COMMISSION = WS-SALES-AMOUNT 0.02
WHEN OTHER
MOVE 0 TO WS-COMMISSION
END-EVALUATE.
DISPLAY “手数料: ” WS-COMMISSION.
GOBACK.
応用・注意点
現場で活用する際のポイントを2点挙げます。
1. 評価順序の重要性
EVALUATE TRUE は「上から順に判定」されます。範囲指定を行う場合、上記の例のように「大きい値から順に(または小さい値から順に)」記述しないと、意図した条件に到達する前に別の条件でヒットしてしまうバグが発生します。順序には十分に注意してください。
2. 可読性の向上
IF 文で複雑な複合条件(AND や OR を多用したもの)を組むよりも、EVALUATE TRUE を使う方が、後からソースを読む担当者にとって「どの条件でこの処理が走るのか」が明確になります。ただし、一つの WHEN 句に複雑すぎる条件式を詰め込みすぎると本末転倒ですので、適宜フラグ(88レベルなど)と組み合わせるのがベテランの流儀です。
構造化された美しいコードは、メンテナンスコストを劇的に下げます。ぜひ今日のコーディングから取り入れてみてください。

コメント