【ABAP】TYPEとLIKEの違い・使い分け方法を1分で解説

ABAP

このページでは、DATA命令TYPES命令のオプションであるTYPEとLIKEの使い分け方法について解説します。

このページを読み終わる時には、以下の違いを説明できるようになります。

DATA A001 TYPE C.     " TYPEオプションを利用

DATA B001 LIKE A001.  " LIKEオプションを利用

このページでは、TYPEとLIKEの使い分けについて端的に解説します。

このページで学べる内容
  • 前提のおさらい
    • DATA命令
    • TYPES命令
  • TYPEオプションの使い方
  • LIKEオプションの使い方
  • TYPEとLIKEの違い

ABAPerを目指す方であれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

前提①:DATA命令

まずは前提のおさらい。DATA命令についての簡単な解説です。「そんなのは分かっているよ!」という方はこの章は読み飛ばしてOK!

DATA命令は変数や構造、内部テーブルを定義する命令です。

DATA LDT_RESULT1 TYPE C.
* DATA (変数名) TYPE (データ型).

DATA LDT_RESULT2 LIKE LDT_RESULT1.
* DATA (変数名) TYPE (参照オブジェクト).
*---------------------------------------------------*
*DATA DEFINITION
*---------------------------------------------------*

DATA Z_SAMPLE1 TYPE D. "日付型の変数「Z_SAMPLE1」を定義

DATA Z_SAMPLE2 TYPE I. "整数型の変数「Z_SAMPLE2」を定義
DATA命令の詳細はこちら

前提②:TYPES命令

続いてTYPES命令のおさらいです。

TYPES命令はデータ型を定義する命令です。

データ型とは、DATA命令で定義する変数(箱)の仕様を指定するもの。

構文ルールは基本的にDATA命令と同様です。

TYPESオプションの後には、任意のデータ型名称を。TYPEオプションの後に事前定義ABAPデータ型、もしくはABAPディクショナリに登録されているオブジェクトを指定します。

TYPES:
    ZBUKRS TYPE BKPF-BUKRS, "会社コード"
    Z_DAY1  TYPE I,        "数字(4文字)"
    Z_DAY2  TYPE N LENGTH 8. "数字(8文字)"

* TYPES (データ型) TYPE (ABAPデータ型).

TYPEオプション(DATA命令/TYPES命令)

ここからが本題です。TYPE/LIKEの違いを説明します。

TYPEオプションは、DATA命令・TYPES命令を利用する際に対象の「データ型」を指定するオプションです。

*---------------------------------------------------*
*DATA DEFINITION
*---------------------------------------------------*

DATA Z_SAMPLE1 TYPE D. "日付型の変数「Z_SAMPLE1」を定義

DATA Z_SAMPLE2 TYPE I. "整数型の変数「Z_SAMPLE2」を定義

LIKEオプション (DATA命令/TYPES命令)

LIKEオプションも同じくDATA命令・TYPES命令のオプション。ただし、TYPEオプションがデータ型を参照するのに対して、LIKEオプションは構造や構造・変数を参照するという点で異なります。

どういうことか、文字だけではわかりづらいかと思いますので、以下のサンプルコードを基に解説します。

*---------------------------------------------------*
*DATA DEFINITION
*---------------------------------------------------*

DATA Z_SAMPLE1 TYPE D.         "日付型の変数「Z_SAMPLE1」を定義

DATA Z_SAMPLE2 LIKE Z_SAMPLE1.  "「Z_SAMPLE1」と同じデータ型で変数「Z_SAMPLE2」を定義

つまり、簡単に言えば「Z_SAMPLE2」は「Z_SAMPLE1」を真似して作りますよ!ということです。そのときに利用するのはLIKEオプションであると覚えましょう。

冒頭で出した、コード例をもう一度見てみましょう。

DATA A001 TYPE C.     " TYPEオプションを利用

DATA B001 LIKE A001.  " LIKEオプションを利用

ここで定義されている変数 B001 は、変数 A001 と同じ変数ですよという意味。つまり A001 と同じような変数 B001 はデータ型Cの変数として宣言されるということです。

TYPEオプションとLIKEオプションの違い

TYPEオプション
⇒既に定義済のデータ型を参照する。

LIKEオプション
⇒既に定義済の変数等を参照する。(その変数を真似して定義しますよ!ということ)

LIKEオプションの注意点

LIKEオプションで指定した参照先の変数・構造が変更された場合、その変数のデータ型も自動的に変わってしまいます。以下のサンプルコードを見てみましょう。

DATA A001 TYPE i.
DATA B001 LIKE A001.

データ型i は4桁の整数を表します。この場合A001もB001も両方のデータ型は「4桁の整数」です。どちらも格納できるデータは4桁の数字で決まるので、5桁で文字列を代入しようとすればエラーが発生します。

さて、このコードを以下のように改修したらどうなるでしょうか?

DATA A001 TYPE D.
DATA B001 LIKE A001.

答えは「変数 A001 が8桁の日付型に変更されたので、変数 B001 も日付型の変数に修正される」です。

したがって、例えばプログラムの改修を行う際にLIKEオプションを多用している場合、1つの変数の定義変更の影響範囲が大きくなります。

変数A のデータ型を変えたら、変数B も 変数C も全部データ型が変わってしまった。。。ということになります。

逆に言えば、1回の改修で関連する全ての変数のデータ型を変更できるというようにメリットとして理解することも可能です。

TYPEオプション
⇒既に定義済のデータ型を参照する。

LIKEオプション
⇒既に定義済の変数等を参照する。(その変数を真似して定義しますよ!ということ)

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

SAP/ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。是非、一度ご覧になってみてください。

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