導入: なぜこの書き方が重要なのか
COBOLの実務現場では、売上集計や件数カウントなど、同じ値を複数の項目に加算するケースが頻繁に発生します。例えば、部門別合計と全社合計を同時に算出する場合などです。この際、冗長にADD文を並べるのではなく、COBOL特有の「複数の受取り側」を指定する構文を活用することで、コードの可読性が向上し、修正時のミスを最小限に抑えることができます。効率的でバグの入り込みにくい「作法」を身につけましょう。
基礎知識: ADD文の仕組み
COBOLのADD文には、単一の項目へ加算するだけでなく、一つの値を複数の項目へ同時に反映させる機能があります。
「ADD A TO B C D」と記述した場合、コンパイラは内部的に「B = B + A」「C = C + A」「D = D + A」という処理を順番に生成します。この記法を使うことで、プログラムの行数を削減し、ロジックの意図を明確にすることが可能です。
実装/解決策: 記述のポイント
この記法を利用する際は、加算対象となる全ての項目が適切な数値データ型(PIC 9など)で定義されていることを確認してください。また、演算結果がオーバーフローしないよう、受け取り側の項目の桁数には十分な余裕を持たせることが肝要です。
サンプルプログラム
以下のコードは、日次売上を商品別合計と全社合計、および取引件数に反映させる実用的な例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-ADD.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SALE-AMT PIC 9(07) VALUE 1000. > 今回の売上額
01 WS-TOTAL-SALE PIC 9(09) VALUE 0. > 全社売上合計
01 WS-DEPT-SALE PIC 9(09) VALUE 0. > 部門売上合計
01 WS-TOTAL-COUNT PIC 9(05) VALUE 0. > 取引件数
PROCEDURE DIVISION.
MAIN-PROCEDURE.
- 一つの売上額を全社合計と部門合計に加算する
- 同時に件数カウンタにも1を加算する
ADD WS-SALE-AMT TO WS-TOTAL-SALE WS-DEPT-SALE.
ADD 1 TO WS-TOTAL-COUNT.
DISPLAY “全社合計: ” WS-TOTAL-SALE.
DISPLAY “部門合計: ” WS-DEPT-SALE.
DISPLAY “取引件数: ” WS-TOTAL-COUNT.
STOP RUN.
応用・注意点: 現場で陥りやすい罠
1. 編集項目への加算:
受け取り側にPIC $ZZZ,ZZ9などの編集項目を指定すると、コンパイラエラーや意図しない挙動の原因となります。必ず内部数値形式の項目を指定してください。
2. ON SIZE ERRORの扱い:
複数の受け取り側を指定した場合、「ON SIZE ERROR」句を付与すると、いずれか一つの項目で桁溢れが発生した時点でエラー処理が実行されます。どの項目が溢れたのか個別に判定したい場合は、あえて別々のADD文に分ける方が安全なケースもあります。
3. 保守性のバランス:
短く書けることは利点ですが、あまりに多くの項目(例えば10個以上)を一度に更新すると、後からコードを追う際に「どの項目が更新対象か」を見落とす可能性があります。ロジックの関連性が強い項目同士に限定して使用するのが、ベテランの作法と言えるでしょう。

コメント