【ABAP】1分で整理する!TYPEとLIKEの使い分け

ABAP

① DATA A001 TYPE TABLE001.

② DATA B001 LIKE A001.

さて、この構文はどちらもエラーなく成り立つものですが、この2つのコードの違いを説明できますか?

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

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

ABAPerであれば、知らないと恥ずかしい超・基本知識ですので、このページの内容は漏れなく理解しておくようにしましょう。

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

前提:DATA命令―変数定義

DATA命令とは「変数」を定義する命令です。

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


ABAPでは、変数宣言時にデータ型を1つ指定する必要があります。

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

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

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

TYPEオプションとは?

TYPEオプションは、DATA命令・TYPES命令で「データ型」を指定するオプションです。

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

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

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

では、LIKEオプションは何でしょうか?

LIKEオプションとは?

LIKEオプションも同じくDATA命令・TYPES命令のオプションです。

ただし、TYPEオプションが「事前に定義された構造や変数を参照する」のに対して、LIKEオプションは「プログラム内で先に宣言されている構造や構造・変数」を参照するという点で異なります。

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

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

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

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

LIKEは英語で「好き」という意味もありますが、ここでは副詞の「~のような」という意味です。

LIKEオプションを利用すると、LIKEの直後に指定した変数と同じデータ型で定義することができるのです。

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

DATA B001 LIKE A001.

ここで定義されているB001は、A001と同じ変数・同じ構造ですよ、という意味です。

つまりA001と全く同じ変数・構造をB001が受け継ぐということになります。

DATA命令のオプションであるという同じですが、両者は別物です。

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

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

LIKEオプション
⇒既に定義済の変数等を参照する。

LIKEオプションの注意点

結論から言うと、LIKEオプションの利用はあまりおすすめではありません。

LIKEオプションで指定した参照先の変数・構造が変更された場合、その変数のデータ型も自動的に変わってしまうためです。

以下の2つの構文を再度見てみましょう。

① DATA A001 TYPE i.

② DATA B001 LIKE A001.

「i」とは4桁の整数という意味です。この場合、A001もB001も両方のデータ型は「4桁の整数」です。

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

① DATA A001 TYPE D.

② DATA B001 LIKE A001.

Dは、日付型です。もうわかりましたね。

この際、②のコードは一切いじっていないのにも関わらず、B001も日付型の変数に修正されるのです。

その修正が狙い通りであれば問題ありませんが、思わぬところで別の変数が参照している場合は悲劇です。バグの原因となる可能性が非常に高いのです。

このように、LIKEオプションの利用は一長一短があるため、利用する際にはきちんとその特性を理解しておく必要があります。

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

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。

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

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