【COBOL学習|初心者向け】COBOLの「終わりの定義」が運命を変える!ADD … END-ADD を使いこなそう

1. なぜ「END-ADD」が重要なのか

COBOLの歴史は古く、昔の書き方では「どこで命令が終わるのか」が曖昧になりがちでした。特に計算処理の途中でエラーが発生した場合、どこまでが加算処理で、どこからが次の処理なのかが不明確だと、意図しないバグを引き起こします。「END-ADD」という「構造化制御構文」を使うことで、プログラムの範囲を明確にし、読みやすく、かつ安全なコードを書くことが可能になります。

2. 基礎知識:構造化プログラミングとは

COBOLの計算命令である「ADD」は、かつては「ピリオド(.)」を最後に打って完了としていました。しかし、ピリオドはプログラムの区切りを意味するため、不用意に使うと、その後の複雑な条件分岐(IF文など)の動作を強制的に終了させてしまうリスクがあります。
「END-ADD」は、その名の通り「ここで加算処理は終わりですよ」とコンパイラに伝えるための「明示的な終了符」です。これを使うことで、計算処理の範囲を物理的に囲い込み、他の命令と混ざるのを防ぐことができます。

3. 実装と解決策:SIZE ERROR を保護する

ADD文の最大のメリットは「SIZE ERROR(桁あふれ)」の制御です。計算結果が変数の桁数を超えてしまった場合、エラー処理を行いたいですよね。END-ADDを使えば、加算とエラー処理を一つの塊として扱うことができるため、複雑なネスト(入れ子)構造の中でも、計算エラーが他のロジックを破壊するのを防げます。

4. サンプルプログラム

以下のコードは、カウンターに値を加算し、もし桁あふれが発生した場合にはエラーメッセージを表示する実用的な例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-ADD.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER PIC 9(3) VALUE 0.
01 ADD-VALUE PIC 9(3) VALUE 500.

PROCEDURE DIVISION.
> 100をカウンターに加算する
ADD 100 TO COUNTER
ON SIZE ERROR
DISPLAY “エラー: 桁あふれが発生しました。”
NOT ON SIZE ERROR
DISPLAY “加算成功。現在の値: ” COUNTER
END-ADD.

> ここでEND-ADDを使うことで、この先の処理に影響を与えません
DISPLAY “処理を終了します。”
STOP RUN.

5. 応用・注意点:現場の知恵

現場で長くコードを保守していると、「なぜかIF文が途中で抜けてしまう」というトラブルに遭遇することがあります。その原因の多くは、古いスタイルの「ピリオド」の打ち間違いです。
ポイントは「ピリオドはプログラムの最後にしか打たない」と決めてしまうことです。各命令の終了は、今回紹介した「END-ADD」や「END-IF」、「END-READ」といった明示的な終了構文に任せましょう。これにより、コードのメンテナンス性が劇的に向上し、意図しない動作を未然に防ぐことができます。ぜひ、今日から意識して使ってみてください。

コメント

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