導入: なぜWHEN OTHERが必要なのか
COBOL開発において、条件分岐は最も頻繁に行われる処理の一つです。特にEVALUATE文は、複数の条件を整理して記述できる非常に強力なツールですが、開発者が想定していない「予期せぬデータ」が入力された場合、プログラムが意図しない挙動をとるリスクがあります。この「想定外」を拾い上げ、安全に処理を制御するために欠かせないのが「WHEN OTHER」句です。本稿では、この句がなぜシステムの堅牢性に直結するのかを解説します。
基礎知識: EVALUATE文とWHEN OTHERの仕組み
EVALUATE文は、C言語などのswitch文に相当する構造化制御構文です。上から順にWHEN条件を評価し、一致した処理を実行します。ここで重要なのは、一致する条件が一つもなかった場合、プログラムはそのままEVALUATE文を終了し、次の処理へ進んでしまうという点です。もしその後の処理に影響が出る場合、バグの温床となります。WHEN OTHERは、どの条件にも合致しなかった際に強制的に実行される「最後の砦」として機能します。
実装/解決策: 異常検知の定石
実装のポイントは、WHEN OTHERを単なる「その他」として扱うのではなく、「異常系処理の入り口」として設計することです。例えば、区分コードの判定でWHEN OTHERに到達した場合は、ログ出力やエラーフラグのセットを行うのが現場の定石です。これにより、本番環境で予期せぬデータが混入しても、原因の特定が容易になります。
サンプルプログラム
以下は、売上データの区分コードを判定するサンプルです。
IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-SAMPLE.
WORKING-STORAGE SECTION.
01 WS-CODE PIC X(01).
PROCEDURE DIVISION.
MOVE ‘Z’ TO WS-CODE.
EVALUATE WS-CODE
WHEN ‘A’
DISPLAY “正常:通常売上です。”
WHEN ‘B’
DISPLAY “正常:返品処理です。”
WHEN OTHER
> どの条件にも合致しない場合、ここが実行されます
DISPLAY “エラー:無効な区分コード[” WS-CODE “]を検知しました。”
PERFORM ERROR-HANDLING-RTN
END-EVALUATE.
STOP RUN.
ERROR-HANDLING-RTN.
DISPLAY “異常終了処理を実行します。”.
応用・注意点: 現場での運用ルール
現場で長くコードを見ていると、WHEN OTHERを省略したくなる気持ちも分かりますが、「明示的な例外処理」は非常に重要です。注意点として、WHEN OTHERの中に複雑なビジネスロジックを詰め込みすぎないようにしてください。あくまで「エラーログの出力」「管理者に通知するフラグのセット」「異常終了の呼び出し」といった、処理の安全性を確保するための記述に留めるのが、保守性を高めるコツです。また、保守担当者が後から見た時に「なぜここに到達したのか」が分かるよう、コード内には必ずコメントを残す癖をつけましょう。

コメント