【COBOL学習|豆知識】EVALUATE文のNOT指定でロジックをスマートに整理する

1. 導入:なぜNOT指定が重要なのか

COBOLのEVALUATE文は、複雑な条件分岐を整理する強力な武器です。しかし、現場では「A以外はすべてB」というロジックを組む際、IF文で複雑な論理演算を重ねてしまい、可読性を落としているコードをよく見かけます。NOT指定を活用すれば、除外条件を明確に定義でき、コードの保守性が劇的に向上します。意図が直感的に伝わるコードを書くことは、ベテランへの第一歩です。

2. 基礎知識:EVALUATE文における条件反転

EVALUATE文は、複数の条件を順番に評価する多岐分岐構文です。通常は「=(等しい)」や「THRU(範囲)」を使用しますが、ここに「NOT」を組み合わせることで、「その値ではない場合」という条件を定義できます。特に、特定のエラー値や対象外のコードを除外したい場合に、ロジックを逆転させて記述することで、ネスト(入れ子)を減らし、スッキリとした構造を実現します。

3. 実装・解決策

NOT指定を用いる際は、対象となる値の範囲を意識することが重要です。例えば、「1から5以外」を記述する場合、単に「1から5ではない」という条件をWHEN句に含めるだけで、コンパイラが自動的にその補集合を判断してくれます。これにより、ELSE(WHEN OTHER)へ到達する条件を意図的に制御することが可能となります。

4. サンプルプログラム

以下は、エラーコード判定を例にしたサンプルです。正常値である「0」や「99」以外をエラーとして処理するロジックを示します。

——————————————————-

  • EVALUATE文におけるNOT指定の活用例

——————————————————-
WORKING-STORAGE SECTION.
01 WS-STATUS-CODE PIC 9(02).

PROCEDURE DIVISION.
MOVE 05 TO WS-STATUS-CODE.

EVALUATE WS-STATUS-CODE

  • 0と99は正常値として処理する

WHEN 0
WHEN 99
DISPLAY ‘処理正常終了’

  • NOT指定により、0と99以外(1~98, 00, 01以外…)を抽出

WHEN NOT 0 AND NOT 99
DISPLAY ‘エラー発生: コード’ WS-STATUS-CODE
PERFORM ERROR-ROUTINE

END-EVALUATE.

STOP RUN.

ERROR-ROUTINE.
DISPLAY ‘再試行が必要です。’.

5. 応用・注意点

現場での注意点として、NOT指定を複数組み合わせる場合は「AND」や「OR」の論理構成に注意してください。特に「WHEN NOT A AND NOT B」とした場合、直感と実際の挙動が一致しているか、境界値テストを念入りに行う必要があります。また、EVALUATE文の最後に「WHEN OTHER」を置く習慣があれば、NOT指定と併用することで、予期せぬ入力値に対する例外処理(バリデーション)が非常に堅牢になります。可読性と堅牢性の両立を目指しましょう。

コメント

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