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指定と併用することで、予期せぬ入力値に対する例外処理(バリデーション)が非常に堅牢になります。可読性と堅牢性の両立を目指しましょう。

コメント