【COBOL学習|初心者向け】モダンCOBOLの作法:マジックナンバーを撲滅する「CONSTANT句」の使い方

1. 導入:なぜCONSTANT句が重要なのか

COBOL開発の現場で、プログラムの中に直接「0.08」や「100」といった数値(マジックナンバー)を書いてしまったことはありませんか?これらは修正時に見落としやすく、バグの温床となります。従来のCOBOLでは「VALUE句」で初期値を設定していましたが、これでは誤ってプログラム内で値を書き換えてしまうリスクが残っていました。モダンCOBOL(2002以降)で導入された「CONSTANT句」を使えば、その値を「絶対に書き換えられない定数」として定義でき、安全性が飛躍的に向上します。

2. 基礎知識:CONSTANT句とは

CONSTANT句は、データ部(DATA DIVISION)で定数を定義するための構文です。通常の変数(データ項目)とは異なり、コンパイラが「これは定数である」と認識するため、実行時にメモリ上の値を変更しようとするとコンパイルエラーや実行時例外を発生させることができます。これにより、プログラムの意図を明確にし、保守性を高めることができます。

3. 実装・解決策

CONSTANT句は、レベル番号01に対して指定するのが一般的です。値の変更が一切不要な設定値や、計算の基準となる係数などに利用します。

構文:
01 定数名 CONSTANT AS 値.

4. サンプルプログラム

以下のコードは、消費税率を定数として定義し、計算に利用する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. CONST-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • 消費税率を定数として定義。プログラム内で書き換え不可となる

01 TAX-RATE CONSTANT AS 0.10.
01 PRICE-EXCL-TAX PIC 9(6) VALUE 1000.
01 TAX-AMOUNT PIC 9(6).

PROCEDURE DIVISION.

  • 定数 TAX-RATE を使用して計算

COMPUTE TAX-AMOUNT = PRICE-EXCL-TAX TAX-RATE.

DISPLAY “税抜金額: ” PRICE-EXCL-TAX.
DISPLAY “消費税額: ” TAX-AMOUNT.

  • 以下の行を記述するとコンパイルエラーになる(定数への代入不可)
  • MOVE 0.20 TO TAX-RATE.

GOBACK.

5. 応用・注意点

最適化の恩恵:コンパイラはCONSTANT句で定義された値を、プログラムの実行バイナリに直接埋め込むなど、効率的な処理を行うことがあります。これにより、処理速度の向上も期待できます。
陥りやすい罠:CONSTANT句はあくまで「コンパイル時に確定する値」に使用します。実行時に読み込む外部ファイルの値などは、CONSTANT句には定義できません。
現場での運用:プロジェクト全体で使用する定数は、COPY句を使って別ファイル(コピーブック)にまとめ、各プログラムでインクルードするようにしましょう。これにより、税率変更などの際も一箇所の修正で済み、マジックナンバーを根本から排除できます。

モダンなCOBOL開発において、定数の管理は品質管理の第一歩です。ぜひ今日から積極的に活用してみてください。

コメント

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