導入:なぜ今、明示的なスコープ終了が必要なのか
現場で古いソースコードを保守していると、ピリオド(.)の打ちすぎで「どこで命令が終わっているのか分からない」という経験はありませんか。特にWRITE文でINVALID KEYやページ制御を組み合わせる際、ピリオドだけで文を閉じると、意図しないロジックの連鎖を引き起こし、バグの温床になります。本稿では、現代的なCOBOL開発において不可欠な「スコープ終了符(END-WRITE)」の重要性と、その活用法を解説します。
基礎知識:スコープ終了符とは
COBOL 85以降、多くの命令でEND-XXXといった「スコープ終了符」が導入されました。これを使うことで、命令の範囲を明確に限定できます。
INVALID KEY句は、キー重複や領域不足などの異常を検知する重要な仕組みです。これを旧来のピリオドで閉じると、その後の処理まで「異常時」と見なされるリスクがあります。END-WRITEを用いることで、WRITE命令の影響範囲を直感的に制御できるようになります。
実装・解決策:構造化された書き込み処理
WRITE … END-WRITEを使用することで、処理の「入れ子」構造が視覚的に分かりやすくなります。特に、複雑なエラーハンドリングや、ページ制御(ADVANCING)を伴う出力処理において、ロジックの分離が容易になります。
サンプルプログラム:安全なレコード書き込み
以下のコードは、実務で頻出する「キー重複チェックを伴う書き出し」の雛形です。
IDENTIFICATION DIVISION.
PROGRAM-ID. WRITE-SAMPLE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OUT-FILE ASSIGN TO ‘DATA.OUT’
ORGANIZATION INDEXED
ACCESS SEQUENTIAL
RECORD KEY IS REC-KEY.
DATA DIVISION.
FILE SECTION.
FD OUT-FILE.
01 REC-OUT.
05 REC-KEY PIC X(05).
05 FILLER PIC X(75).
PROCEDURE DIVISION.
OPEN OUTPUT OUT-FILE.
MOVE ‘12345’ TO REC-KEY.
- WRITE命令の範囲をEND-WRITEで明示的に閉じることで可読性を向上
WRITE REC-OUT
INVALID KEY
DISPLAY ‘エラー: キーが重複しています: ‘ REC-KEY
PERFORM ERR-PROCEDURE
NOT INVALID KEY
DISPLAY ‘正常に書き込みました’
END-WRITE.
CLOSE OUT-FILE.
STOP RUN.
ERR-PROCEDURE.
- エラー時のリカバリ処理など
EXIT.
応用・注意点:現場で陥りやすい罠
注意点1:ピリオドとの併用禁止
END-WRITEの直前にピリオドを置いてはいけません。ピリオドを打つと、そこで文が強制終了し、END-WRITEが無効化されるか、コンパイルエラーの原因になります。構造化構文を使う際は、文の最後以外ではピリオドを打たないのが鉄則です。
注意点2:古いコンパイラとの互換性
非常に古い環境(COBOL 74以前の規格など)ではEND-WRITEがサポートされていない場合があります。しかし、現在のメインフレームやオープン系のCOBOLコンパイラであれば、ほぼ例外なく使用可能です。保守性の観点から、積極的に採用することをお勧めします。
コードの可読性を高めることは、将来の自分やチームメンバーへの最大の贈り物です。ぜひ、今日からEND-WRITEを活用してみてください。

コメント