【ABAP】3分で学ぶCONSTANTS命令―定数定義

ABAP

ABAPの定数定義を行うCONSTANTS命令について解説します。

CONSTANTS命令は、ABAPにおける定数を定義する命令です。このページでは、そもそも定数とは何か?定数を定義することのメリットは何か?DATA命令との違いは何かなど、基本的な内容を中心に解説します。

このページで学べる内容
  • 定数とは?
  • 定数定義を行う意味と目的
  • 定数を定義する方法―CONSTANTS命令の使い方

ABAPエンジニアを目指す方であれば、知らないと恥ずかしい超・重要知識ですので、是非最後までご覧ください。

それでは早速解説を始めます。

スポンサーリンク
スポンサーリンク

ABAP:定数とは?

定数とは、プログラム実行時に値を変更することができないデータオブジェクトのことです。

DATA命令で定義する「変数」は、値を自由に書き換えることができます。

一方、「定数」という言葉が用いられる場合は言葉の通り、プログラム実行中に「変更されることがない」データオブジェクトであると理解しましょう。定数はプログラム開発時点から終了時点まで定数は不変です。

ABAP,CONSTANTS,DATA,定数,変数

構文ルール:CONSTANTS命令

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'.

(定数名)・・・任意の名称でOK

基本的な構文ルールは、DATA命令と全く同じです。CONSTANTS命令で定義するのは変数ではなく定数なので、宣言時に「初期値」を決定している必要があります。初期値を設定するVALUEオプションについては、以下のページで詳しく解説しておりますので、合わせてご覧ください。

サンプルコード:CONSTANTS命令

CONSTANTS命令のサンプルコードです。CONSTANTS命令でもDATA命令と同様、変数型でも構造型でも定数を定義することが可能です。

CONSTANTS:
  BEGIN OF LCF_ADDLESS,
    city     TYPE string VALUE 'TOKYO',
    country  TYPE string VALUE 'JAPAN',
  END   OF LCF_ADDLESS.

尚、以下のようにチェーン命令の形式で定義することも可能です。

CONSTANTS:
    city     TYPE string VALUE 'TOKYO',
    country  TYPE string VALUE 'JAPAN',
    TOWN     TYPE string VALUE 'SHIBUYA'.

構造型の定数と、チェーン命令で記述した複数の定数を混同していしまう方がいらっしゃいまいますので、上記2つのコードを比較してその違いを整理しておきましょう。

※チェーン命令については下記のページ内で解説しておりますので、合わせてご覧ください。

定数を利用する意味

構文ルールも簡単で、概念も理解しやすいCONSTANTS命令ですが、一体どこで利用するのでしょうか?何のために定数が用いられるのでしょうか?

大きく2つの観点から定数を定義するメリットがあります。

可読性の向上

定数を定義せずにコーディングしたプログラムと、定義定義がされているプログラムを比較してみます。

RESULT = PRICE*1.1
CONSTANTS TAX TYPE NUMC VALUE '1.1'.

RESULT = PRICE*TAX.

いかがでしょうか?上が定数を利用せずにハードコーティングした例で、下が定数を用いてソフトコーディングした例です。

定数を用いることで、直感的にソースを理解することができます。処理は同じでも、ハードコーティングされている場合「1.1」という数字の意味が分かりませんが、定数として「TAX = 1.1」とすれば「1.1」という数字が税率(消費税率)であることが直感的にわかるようになります。

保守性の向上

定数を定義することで、保守性が向上します。

以下2つのサンプルコードを改修する場面を考えてみます。例として、消費税率の変更を考えましょう。

RESULT  = PRICE*1.1 .
AMOUNT  = U_PRICE*1.1 .
PAYMENT = P_PRICE*1.1 .
CONSTANTS TAX TYPE NUMC VALUE '1.1'.

RESULT  = PRICE*TAX.
AMOUNT  = U_PRICE*TAX.
PAYMENT = P_PRICE*TAX.

下のサンプルコードを改修するとすれば、最初の1行だけ(定数の値を変更)を変更すればOKですが、ハードコーティングされていると3か所直す必要が出てきてしまいます。

また、直すのは本当に3か所だけ?というのを調査する必要も出てきてしまいます。定数定義の目的については、以下の記事でさらに詳しく解説していますので、合わせてご覧ください。

ABAPを1から勉強したい方は

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。以下で解説されている記事の内容をある程度理解できれば、最低限の知識を兼ね備えたABAPエンジニアとして現場で活躍できます。

現在、完全無料で公開しておりますので、是非ご覧ください!

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