なぜADD文のGIVING句を使うのか
COBOLで計算を行う際、初心者の方は「計算した値を一旦計算用項目に入れて、その後に編集項目へMOVEする」という手順を繰り返していませんか?もちろん間違いではありませんが、コードが冗長になりがちです。
今回紹介する「ADD文のGIVING句」を活用すれば、計算と数値の整形(カンマやゼロサプレスなど)を1行で完結させることができます。効率的で読みやすいコードを書くための、現場で必須のテクニックです。
基礎知識:データ項目と編集項目の違い
COBOLには、演算を行うための「数字項目(PIC 9など)」と、画面表示や帳票出力のための「数字編集項目(PIC Zやカンマが入ったもの)」があります。
通常、数字編集項目は「計算結果を表示する専用の入れ物」です。ここがポイントなのですが、GIVING句を使うと、計算結果をこの「編集項目」に直接代入する際に、MOVE文と同じように自動で編集(整形)処理を施してくれるのです。これにより、プログラムの行数を減らし、ミスを防ぐことができます。
実装のポイント
ADD文の後にGIVING句を記述すると、計算結果は元の項目(AやB)には影響を与えず、指定したCにのみ格納されます。このとき、Cの定義(PIC句)に従って自動的に数字が整形されます。計算ロジックと表示ロジックを切り離せるため、後から修正が必要になった際も非常に管理しやすくなります。
サンプルプログラム
以下のコードをコピーして、コンパイル・実行してみてください。計算結果が自動的にカンマ付きで表示されることが確認できます。
IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 計算用の数字項目
01 WS-TAX PIC 9(05) VALUE 800.
01 WS-SUBTOTAL PIC 9(05) VALUE 10000.
- 編集用の項目(カンマやゼロサプレスを定義)
01 WS-TOTAL-EDITED PIC ZZ,ZZ9.
PROCEDURE DIVISION.
MAIN-LOGIC.
- ADD文のGIVING句を使って計算と編集を同時に行う
- WS-TAXとWS-SUBTOTALを足し、その結果を編集してWS-TOTAL-EDITEDへ入れる
ADD WS-TAX WS-SUBTOTAL GIVING WS-TOTAL-EDITED.
- 結果を表示(結果は「 10,800」となる)
DISPLAY “計算結果: ” WS-TOTAL-EDITED.
STOP RUN.
応用・注意点
現場で非常に重要な注意点があります。それは、GIVING句で指定した項目は「計算用に使ってはならない」という点です。
例えば、ADD A B GIVING C の後に、さらに ADD D C GIVING C と書いてしまうと、Cは編集項目であるため、予期せぬ桁あふれや符号エラーが発生するリスクがあります。
編集項目はあくまで「最終的な結果を表示するための出口」と割り切り、演算はあくまで数字項目(PIC 9)同士で行うのがCOBOLの鉄則です。この作法を守ることで、バグ知らずの安定したプログラムが書けるようになりますよ。

コメント