ABAPの基本中の基本。CONSTANTS命令について解説します。

CONSTANTS命令はABAPで定数定義を行うための命令です。変数定義を行うDATA命令とセットで覚えるのがおすすめ!
このページでは、そもそも定数とは何か?定数を定義することのメリットは何か?DATA命令との違いは何かなど、基本的な内容を中心に解説します。
SAPエンジニア/ABAPerを目指す方であれば知らないと恥ずかしい超・重要知識です。是非最後までご覧ください。
ABAP:定数とは?

まずはプログラミングにおける「定数」の意味から学習します。
「定数」とはプログラム実行時に値を変更することができないデータオブジェクト(箱)のことです。
「定数」の対義語は「変数」で、変数の場合はプログラム実行中に値を書き換えることが可能です。一方「定数」の場合はプログラム実行中にその値を書き換えることはできません。

仮に無理やり書き換えようとするコードを書くと、構文エラー/実行時エラー(ダンプ)が発生します。
定数はプログラム開発時点から終了時点まで定数は不変であると理解しておきましょう。

構文ルール:CONSTANTS命令

ここからは本題のABAPにおける定数定義の仕方・使いどころを学習していきます。
CONSTANTS (定数名) TYPE (データ型) VALUE (初期値).
CONSTANTS GC_TEST(5) TYPE N VALUE '12345'. CONSTANTS: GC_BUKRS_1 TYPE C VALUE '1000', GC_BUKRS_2 TYPE C VALUE '2000', GC_BUKRS_3 TYPE C VALUE '3000'.
構文ルールはDATA命令と基本的には同じですが、CONSTANTS命令で定義するのは変数ではなく定数なので、宣言時にVALUEオプションを利用して「初期値」を指定する必要があります。

VALUEオプションって何?という方は、以下のページで詳しく解説しておりますので、合わせてご覧ください。
サンプルコード:CONSTANTS命令

CONSTANTS命令の使い方をよりイメージしやすいようにいくつかサンプルコードを記載します。
どのような使い方があるのか?をインプットしておきましょう。
CONSTANTS: BEGIN OF LCF_ADDLESS, city TYPE string VALUE 'TOKYO', country TYPE string VALUE 'JAPAN', END OF LCF_ADDLESS.
CONSTANTS命令ではDATA命令と同じように構造として定義することも可能です。
上記のように似たような種類の定数を分類しておきたい場合などに利用します。
CONSTANTS: city TYPE string VALUE 'TOKYO', country TYPE string VALUE 'JAPAN', TOWN TYPE string VALUE 'SHIBUYA'.
単にチェーン命令の形式で定義することも可能です。基本はプログラム冒頭にまとめてチェーン形式で定数定義を行うことが一般的です。

チェーン命令って何?というかたはもう一度ABAPの基本構文ルールを学習しておきましょう!
是非以下の記事をご覧ください。
定数を利用する意味/メリット

構文ルールも簡単で、概念も理解しやすいCONSTANTS命令ですが、一体どこで利用するのでしょうか?何のために定数が用いられるのでしょうか?
この章ではCONSTANTS命令を利用するメリットを以下の2点に集約して解説します。
CONSTANTS命令を利用するメリット①:可読性の向上
まず1つ目のメリットは「可読性」の向上。つまり、簡単に言えばCONSTANTS命令を利用する方がプログラム全体が読みやすくなる場合が多いです。
定数を定義せずにコーディングしたプログラムと、定義定義がされているプログラムを比較してみます。
CONSTANTS命令を利用しない場合
RESULT = PRICE * 0.1.
CONSTANTS命令を利用した場合
CONSTANTS TAX_RATE TYPE NUMC VALUE '0.1'. " 定数定義 税率→10% RESULT = PRICE * TAX_RATE.
いかがでしょうか。CONSTANTS命令を利用することで、ただの定数が「どんな意味を持った数字・値」なのか?という点を明確にすることができます。

処理は同じでも、ハードコーティングされている場合「1.1」という数字の意味が分かりませんが、定数として「TAX_RATE = 15」とすれば「15」という数字が税率であることが直感的にわかるようになります。
CONSTANTS命令を利用するメリット②:保守性の向上
2つ目のメリットは保守性の向上です。つまり、後で修正を行う必要が出た場合にCONSTANTS命令を利用していれば修正・改修が簡単になるということです。
以下2つのサンプルコードを改修する場面を考えてみます。例として、消費税率の変更を考えましょう。
CONSTANTS命令を利用しない場合
RESULT = PRICE * 1.1 . AMOUNT = U_PRICE * 1.1 . PAYMENT = P_PRICE * 1.1 .
CONSTANTS命令を利用した場合
CONSTANTS TAX TYPE NUMC VALUE '1.1'. RESULT = PRICE * TAX. AMOUNT = U_PRICE * TAX. PAYMENT = P_PRICE * TAX.
下のサンプルコードを改修するとすれば最初の1行だけ(定数の値を変更)を変更すればOK。ですが、ハードコーティングされていると3か所直す必要が出てきてしまいます。

また、直すのは本当に3か所だけ?というのを調査する必要も出てきてしまいます。定数定義の目的(ハードコーディング回避のメリット)については、以下の記事でさらに詳しく解説していますので、合わせてご覧ください。
SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!