【COBOL学習|実務向け】COBOLの「構造化」を極める:WRITE … END-WRITEの正しい使い方とメリット

導入:なぜ今、明示的なスコープ終了が必要なのか

現場で古いソースコードを保守していると、ピリオド(.)の打ちすぎで「どこで命令が終わっているのか分からない」という経験はありませんか。特に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を活用してみてください。

コメント

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