【COBOL学習|初心者向け】COBOLの複雑な条件分岐をスマートに!EVALUATE TRUE ALSO構文の活用術

1. 導入:なぜこのテクニックが重要なのか

現場でCOBOLのコードを読んでいると、IF文が何重にも入れ子(ネスト)になっている「スパゲッティコード」に出会うことはありませんか?条件が増えれば増えるほど、どのIFがどのELSEに対応しているのか分かりにくくなり、バグの温床になります。今回紹介する「EVALUATE TRUE ALSO」構文は、複数の条件をマトリックス(行列)のように整理して判定できるため、コードの可読性を劇的に高め、複雑なビジネスロジックをスッキリと記述するために非常に強力な武器となります。

2. 基礎知識:EVALUATE TRUEとは何か

通常、EVALUATE文は変数の値を評価しますが、EVALUATE TRUEと記述すると、「後ろに続く条件式が真(TRUE)であるかどうか」を評価対象に切り替えることができます。さらにALSOを組み合わせることで、複数の条件を並列的にチェックすることが可能になります。
これは、プログラムの「状態」をテーブルのように定義して判定する手法で、複雑な業務ルールを実装する際に欠かせない「構造化プログラミング」の基本テクニックです。

3. 実装・解決策:条件をマトリックスで捉える

この構文のコツは、判定したい条件を「表」のように書き出すことです。
例えば、「会員ランクがAで、かつ未払い金がない場合」という処理を、IF文を重ねずに直感的に記述できます。条件をWHEN句に並べるだけで、プログラムの論理構造が一目で理解できるようになります。

4. サンプルプログラム

以下のサンプルは、会員ランクと支払状況という2つの条件を組み合わせて、サービスの可否を判定する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-RANK PIC X.
01 WS-PAY-STATUS PIC X.
PROCEDURE DIVISION.
> サンプル用の値設定
MOVE ‘A’ TO WS-RANK.
MOVE ‘N’ TO WS-PAY-STATUS.

> EVALUATE TRUE を使うことで、条件の組み合わせをマトリックス的に判定
EVALUATE TRUE ALSO TRUE
> ランクAかつ未払いなし(N)の場合
WHEN WS-RANK = ‘A’ ALSO WS-PAY-STATUS = ‘N’
DISPLAY ‘サービス利用可能です。’

> ランクBだが未払いがある場合
WHEN WS-RANK = ‘B’ ALSO WS-PAY-STATUS = ‘Y’
DISPLAY ‘支払いを済ませてから利用してください。’

> それ以外の場合
WHEN OTHER
DISPLAY ‘利用対象外です。’
END-EVALUATE.

GOBACK.

5. 応用・注意点:現場で陥りやすい罠

この構文を使う際に注意すべき点は、「論理の網羅性」です。WHEN句に記述した条件以外の組み合わせが発生した場合、意図せず「WHEN OTHER」に流れてしまうことがあります。

また、条件式が複雑になりすぎると、逆に可読性を下げることにもなります。一つのWHEN句にALSOを何個も繋げるのではなく、せいぜい3つ程度に留めるのが、ベテランとしてコードを保守しやすくするコツです。複雑すぎる判定は、一度フラグ変数に値をセットしてから判定するなど、処理を分割することも検討してくださいね。

コメント

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