【COBOL学習|豆知識】COBOLのEVALUATE文:条件の重なりを正しく理解し、堅牢なコードを書く

導入:なぜ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コードの秘訣と言えるでしょう。

コメント

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