【COBOL学習|豆知識】COBOLの「MULTIPLY … END-MULTIPLY」で実現する、堅牢な構造化プログラミング

なぜ今、MULTIPLYの終端が重要なのか

現代のCOBOL開発において、最も重視されるのは「可読性」と「保守性」です。かつては単純な計算を行っていただけのMULTIPLY命令も、複雑なIF文やEVALUATE文の中に組み込まれるケースが増えています。しかし、終端記号(END-MULTIPLY)を省略すると、どこまでが計算処理なのかが曖昧になり、意図しない論理エラーを引き起こす原因となります。このTipsでは、構造化制御構文を活用して、バグを未然に防ぐ安全なコーディング手法を解説します。

基礎知識:構造化構文とは

COBOLにおける「構造化構文」とは、命令の開始から終了までを明確な境界で囲む仕組みのことです。END-MULTIPLYのような終端記号を使うことで、コンパイラは「この計算処理はここまで」と正確に認識できます。特に、複雑な入れ子構造の中でこの終端記号を記述することは、プログラムの実行順序を制御し、予期せぬ制御フローへの飛び込みを防ぐために非常に有効です。

実装と解決策

MULTIPLY文を使用する際、単純な計算であっても「END-MULTIPLY」を記述する癖をつけましょう。これにより、後続の行に別の処理を追加した際、計算対象の範囲が誤って拡張されるといった人為的なミスを確実に防ぐことができます。また、コードのインデントを整えることで、誰が見ても処理の範囲が一目でわかるようになります。

サンプルプログラム

以下のサンプルは、条件分岐の中でMULTIPLYを安全に使用する例です。

——————————————————-

  • サンプル:構造化による乗算処理

——————————————————-
IDENTIFICATION DIVISION.
PROGRAM-ID. MULT-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-UNIT-PRICE PIC 9(05) VALUE 100.
01 WS-QUANTITY PIC 9(03) VALUE 5.
01 WS-TOTAL-AMOUNT PIC 9(07) VALUE 0.
01 WS-DISCOUNT-FLG PIC X(01) VALUE ‘Y’.

PROCEDURE DIVISION.

  • 条件に応じて計算を行う

IF WS-DISCOUNT-FLG = ‘Y’

  • 数量を単価に掛けて合計を算出

MULTIPLY WS-QUANTITY BY WS-UNIT-PRICE
GIVING WS-TOTAL-AMOUNT
END-MULTIPLY
DISPLAY “計算完了: 合計金額は ” WS-TOTAL-AMOUNT ” です。”
ELSE
DISPLAY “割引対象外です。”
END-IF.

STOP RUN.

応用・注意点

現場で陥りやすいバグとして、「GIVING」句の使用忘れがあります。GIVINGを指定しない場合、計算結果は「BY」の後の変数(今回の例ではWS-UNIT-PRICE)に上書きされます。元の値が失われると致命的なバグに繋がるため、基本的にはGIVING句を使い、計算結果を別の変数に格納する設計を推奨します。また、古いレガシーコードを改修する際、END-MULTIPLYが抜けている箇所を見つけたら、周囲のロジックに影響を与えないことを確認した上で、積極的に補完していくことをお勧めします。小さな積み重ねが、堅牢なシステムを支える鍵となります。

コメント

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