PR

【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」を定義

前提②: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から勉強したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました