導入: なぜ今、明示的な終了指定子が必要なのか
長年COBOLの現場にいると、古いプログラムの改修で頭を悩ませることがあります。特に、入れ子になった条件分岐(IF文やEVALUATE文)がどこで終了しているのか、ピリオド(.)の打ち方ひとつでロジックが崩壊しているケースです。
EVALUATE文は非常に強力な制御構文ですが、かつてのCOBOLでは「ピリオド」がその範囲の終了を意味していました。しかし、これでは意図しない場所でプログラムが終了してしまうリスクがあります。そこで重要なのが、構造化プログラミングの要である「END-EVALUATE」です。これを使うことで、可読性が向上し、保守時のデバッグ時間を大幅に短縮できます。
基礎知識: EVALUATEとEND-EVALUATEの仕組み
EVALUATE文は、他の言語でいうところの「switch文」や「case文」に相当します。複数の条件を評価し、一致した処理を実行する仕組みです。
従来のCOBOL(COBOL-74以前)では、文の終わりをピリオドで示していましたが、現代の構造化COBOLでは「END-EVALUATE」という明示的な終了指定子を使用します。これにより、コンパイラに対して「ここから先はEVALUATE文の範囲外ですよ」と明確に伝え、ロジックの入れ子構造を安全に管理できるようになります。
実装/解決策: 構造化の徹底
現場での鉄則は「ピリオドを極力使わず、END-EVALUATEで閉じる」ことです。特に複数の条件分岐が重なる場合、ピリオドを使ってしまうと、一つ上の階層の制御まで強制終了させてしまうバグ(いわゆる「ピリオド・バグ」)を誘発します。
EVALUATE文をEND-EVALUATEで閉じる習慣を身につけるだけで、ソースコードの論理的な「塊」が明確になり、後任者への引き継ぎがスムーズになります。
サンプルプログラム: 実践的EVALUATEの使用例
以下のコードは、ステータスコードに応じて処理を分岐させる標準的な実装例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. EVAL-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 W-STATUS-CODE PIC X.
PROCEDURE DIVISION.
MOVE ‘A’ TO W-STATUS-CODE.
> 条件分岐の開始
EVALUATE W-STATUS-CODE
WHEN ‘A’
DISPLAY ‘正常終了処理を実行します’
WHEN ‘B’
DISPLAY ‘警告処理を実行します’
WHEN OTHER
DISPLAY ‘エラー処理を実行します’
END-EVALUATE. > 明示的に終了を宣言することで、後続の処理が安全に継続できる
DISPLAY ‘分岐後の共通処理へ進みます’.
STOP RUN.
応用・注意点: 現場で役立つアドバイス
現場で陥りやすい失敗は、ピリオドを多用しすぎて制御フローを見失うことです。特にEND-EVALUATEの直後にピリオドを置く癖がある方は、そのピリオドが「プログラムの終わり」を意味していないか再確認してください。
また、複雑な分岐ではEVALUATE文を入れ子にすることもあるでしょう。その際、END-EVALUATEを適切に配置していれば、インデントと合わせてロジック構造が一目瞭然になります。「END-EVALUATEを書くことが、次世代の保守エンジニアへの思いやり」だと考えて、ぜひ日々のコーディングに取り入れてください。

コメント