導入:なぜEVALUATE文の評価順序が重要なのか
COBOL開発において、条件分岐を整理する際に欠かせないのがEVALUATE文です。多くの新人技術者は、この構文を「IF文を並べるより見やすいツール」程度に捉えがちですが、実は「評価の優先順位」を正しく理解していないと思わぬロジックミスを引き起こします。特に、複数の条件が重なる場合に、どの処理が実行されるかを正確に把握することは、保守性の高いプログラムを書くための第一歩です。
基礎知識:EVALUATE文の「突き抜け」がない安心感
他言語、例えばC言語やJavaのswitch文では、各ケースの最後に「break」を書き忘れると、次の条件まで処理が流れてしまう「フォールスルー(突き抜け)」という現象が発生します。しかし、COBOLのEVALUATE文は非常に安全に設計されています。「上から順に評価し、最初に合致したWHEN句だけを実行して、直ちにEND-EVALUATEへ抜ける」という仕様が言語レベルで保証されているのです。
実装:条件の重なりを制御する論理
EVALUATE文で条件が重なる場合、最も重要なルールは「記述順序」です。より限定的な条件(例外処理や特定の範囲)を先に記述し、一般的な条件を後に配置するのが鉄則です。この順序を逆にすると、意図した処理にたどり着く前に別の処理が実行されてしまいます。
サンプルプログラム:安全な条件分岐の実装例
以下に、条件の重なりを考慮した基本的なサンプルコードを記載します。
01 WS-SCORE PIC 9(03).
01 WS-RESULT PIC X(20).
- — 評価の優先順位を意識した実装 —
EVALUATE TRUE
- 最初に「例外的な範囲(100点以上)」を評価する
WHEN WS-SCORE > 100
MOVE ‘エラー:範囲外です’ TO WS-RESULT
- 次に「特定の条件(80点以上)」を評価する
WHEN WS-SCORE >= 80
MOVE ‘合格:優秀です’ TO WS-RESULT
- 最後に「その他の条件」を評価する
WHEN OTHER
MOVE ‘不合格または未受験’ TO WS-RESULT
END-EVALUATE.
応用・注意点:現場で陥りやすい罠
現場でよくある失敗は、WHEN OTHERを安易に使いすぎてしまうことです。WHEN OTHERは「それ以外すべて」を拾うため、予期せぬデータが紛れ込んだ場合でも何らかの処理が走ってしまいます。
また、EVALUATE TRUEを使うと、WHEN句の中に複雑な条件式(AND/ORなど)を記述できますが、条件を詰め込みすぎると可読性が著しく低下します。複雑な条件が必要な場合は、事前にフラグ変数に値をセットするなどして、EVALUATE文自体はシンプルに保つのがベテランの作法です。「条件の重なり」を制御し、可読性を維持することこそが、長期的な保守に耐えうるCOBOLコードの秘訣と言えるでしょう。

コメント