【COBOL学習|初心者向け】COBOLの計算をスマートに!ADD文のGIVING句と編集機能を活用しよう

なぜ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の鉄則です。この作法を守ることで、バグ知らずの安定したプログラムが書けるようになりますよ。

コメント

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