【ABAP】CONSTANTS命令

概要

定数を定義する際に使用します。
定数とは変更することができない定まった値となります。
プログラム実行中に定数の値を変更することはできず、変更を行った場合はエラーとなります。

命令文

DATA命令と構文は同じですがVALUEオプションを必ず使用しなければならず、値の書換えはできません。

命令文

CONSTANTS 定数 TYPE データ型 VALUE 値.

特徴

大きく2つあります。
特徴ごとにリテラルで直接指定のやり方とCONSTANTS命令を比較して説明すると以下の通りです。

可視性についてはリテラルを使用したやり方だと’3.14′,’X’などとなりますが何の値なのかが分かりません。
CONSTANTS命令だと定数名を指定するためPIやTESTFLGなど名称で判断しやすくなり、データ型も分かります。

メンテナンス性については複数個所に同じ定数を指定する場合、修正が発生した時にリテラルだと箇所ごとに修正が必要となりますがCONSTANTS命令だとVALUEで指定した値のみ変更することで全ての箇所に反映されます。

  • 可視性:何の値なのか何のデータ型なのか分かりやすい
  • メンテナンス性:コーディングで複数回使用する場合に修正箇所が1か所のみとなる

コーディング

CONSTANTS命令で説明していない内容として初期値を定数として定義する事が可能です。
VALUEオプションは必ず使用する必要があるためIS INITIALを使用して初期値を定義します。
他にもBEGIN OFを使用する事で構造型で定義することができます。使用する場合はコーディングの通り構造型-定数で使用可能です。構造型のみの場合は構造型の中で定義した定数が結合された状態となります。
プロジェクトで使用している例を見たことがないため、あまり使用しないテクニックかと思いますが初期値は使用する場面がありそうです。

CONSTANTS:
  C_TAX   TYPE I VALUE 10,                     "消費税
  C_RESET TYPE P DECIMALS 3 VALUE IS INITIAL.  "初期化

CONSTANTS:
  BEGIN OF STEPS,
    C_STEPS1(3)   TYPE N VALUE 001,   "ステップ数1
    C_STEPS2(3)   TYPE N VALUE 002,   "ステップ数2
    C_B1_FLOOR(2) TYPE C VALUE 'B1',  "地下1階
    C_B2_FLOOR(2) TYPE C VALUE 'B2',  "地下2階
    C_B3_FLOOR(2) TYPE C VALUE 'B3',  "地下3階
  END OF STEPS.

WRITE:
    'C_TAX     :', C_TAX,            "消費税
  / 'C_RESET   :', C_RESET,          "初期化
  / 'C_STEPS1  :', STEPS-C_STEPS1,   "ステップ数3
  / 'C_STEPS2  :', STEPS-C_STEPS2,   "ステップ数2
  / 'C_B1_FLOOR:', STEPS-C_B1_FLOOR, "地下1階
  / 'C_B2_FLOOR:', STEPS-C_B2_FLOOR, "地下2階
  / 'C_B3_FLOOR:', STEPS-C_B3_FLOOR, "地下3階
  / 'STEPS     :', STEPS.
実行結果