日々、刻々と進化するIT業界、そしてWEB業界。
IT人材の活躍の場は増える一方で、日々知識を吸収し続けなければならない状況ですね。ABAPも、かなりレガシーと化した言語になっているように感じますが、一方でこれから大きな波(~2025年)が来ることも確か。(多分)
今回は、最新のABAPコーディングについて解説します。
本記事では、DATA命令、TYPES命令がなんとなくわかっていることが必要です。理解に自信が無い方は、一度以下のページをご覧いただくことをお勧めします。
@DATAでデータのインライン宣言
何故、インライン宣言というのか。これも合わせて解説します。
従来の書き方と、これからの書き方を比較してみてみましょう。
例)変数に値を入れる場合
従来の記述
DATA:
GW_DATA001 TYPE YT_001.
GW_DATA001 = "I".
DATA命令の解説ページで説明した通りです。
事前に、DATA命令で変数を格納する「箱」を作ったうえで、後続の処理命令で「箱」の操作を実行しました。
最新の書き方
@DATA(GW_DATA001) = "I".
@DATA(変数名) と記述することで、変数の宣言と変数に対する操作を同時に実行することができます。
さらに別の例も見ていきましょう。
例)SELECT文で利用する場合
従来の記述
DATA : LV_VKORG TYPE YD_VKORG.
SELECT SINGLE
VKORG
FROM TVKO
INTO LV_VKORG
WHERE VKORG = @P_VKORG.
最新の書き方
SELECT SINGLE
VKORG
FROM TVKO
INTO @DATA(LV_VKORG)
WHERE VKORG = @P_VKORG.
このように1行にまとめて記述することが可能です。
メリットとしては、パッと見でわかるように、書く行数が少なくて済むことです。ただし、実はそれだけではありません。この記述方式を使うとかなり便利になるポイントがあるんです。
@DATAによるインライン宣言のメリット

データ型差異による構文エラーが出ない
@DATA宣言をすると、コードが短くなり読みやすくなります。ただし、それよりも強調したいのは「データ型」をあまり意識する必要がなくなる、ということです。言い換えれば、データ型が違うことによる構文エラーがでない、ということです。
もう一度、先ほどの例を見てみましょう。
SELECT SINGLE
VKORG
FROM TVKO
INTO @DATA(LV_VKORG)
WHERE VKORG = @P_VKORG.
この場合、LV_VKORGのデータ型(※「箱」の仕様)はどうなっているでしょうか?
ご推察通り、項目 "VKORG" と同様のデータ型に勝手になってくれるんです。インライン宣言が導入される前のABAPでは、事前にDATA命令で変数定義を行う際に必ず取得元の項目のデータ型に対応して宣言する必要がありました。
(対応するデータ型は定まっているものの、わざわざ定義する必要があった。)
しかし、ここで行っているように@DATAでインライン宣言をすると、データ型は論理的に追従してくれるようになります。
コーディング時に強く意識する必要がなくなります。
読みやすい
先ほど言った「短くなるから読みやすい」ということではありません。
上記のようにインライン宣言をすると、変数定義と変数の処理を同時に、同じ箇所で行えるため、どの変数がどの処理で変更されているのかが分かりやすいんです。
コードが長くなればなるほど、変数が多くなれば多くなるほど、どれがどれか非常に分かりにくいのですが、インライン宣言をすることでその欠点を補うことができます。
最後に
インライン宣言を使えると「おっ!」と言わせることができます。かつ、メリットも大きいので積極的に利用することを推奨します。ただし、対応しているABAPのバージョンは限定されますので、ご注意ください。