ABAPのプログラミングを行う際に必要不可欠な基本知識―データ型について初心者向けに1から整理して解説します。
データ型とは、その名の通りデータオブジェクトがどのようなデータであるか?を示すもの。
ABAPでは、すべてのデータオブジェクトは必ずいずれかのデータ型を保持しています。このページでは、SAPにおけるデータ型とデータ型の定義方法・利用方法を初心者向けに網羅的に解説します。
ABAPエンジニアを目指す方であれば、これを知らないと何も始まらないレベルで重要な基本知識です。是非最後までご覧ください。
データ型とは?
冒頭でも説明した通り、データ型とは数字・文字等のデータ種別と、データ長(データの大きさ)の属性情報です。
例えば、"数字" のデータ型を持つ変数に、「こんにちは!」などの文字列を格納することはできません。
データ型を適切に定義しておくことで、誤って異なるデータを格納することを防げると同時に、金額の桁誤りなどを防止することができます。
PythonやJavaScriptなど、自動的にデータ型を付与してくれる言語もありますが、ABAPは事前定義が必須。
したがって、ABAPでプログラミングを行う際にはこのデータ型に対する理解は不可欠です。
プログラミング言語の種類によっては、プログラム実行時に変数のデータ型を自動判定してくれます。このようなプログラミング言語「動的型付け言語」と呼びます。
対義語は「静的型付け言語」で、静的型付け言語はプログラム実行時に自動でのデータ型が付与は行われません。静的型付け言語では、変数の定義時に必ずどのデータ型を持つか?を事前定義しておく必要があります。
ABAP:データ型の3分類
ABAPでは、このデータ型を3つの領域で管理しています。
1つが、事前にSAP標準で用意されている事前定義のABAPデータ型。もう1つが、ABAPディクショナリで自分で定義するABAPディクショナリデータ型。最後が、プログラム内で定義するローカルデータ型です。
- 事前定義のABAPデータ型
- ABAPディクショナリデータ型
- ローカルデータ型
それぞれ定義方法や利用制限などで細かく種類が分かれます。
1つずつ、解説します。
事前定義のABAPデータ型
事前定義のABAPデータ型は、SAPをインストールした時点で初めから定義されているデータ型です。
この事前定義ABAPデータ型は、どのプログラムからでも利用することができるデータ型で、最も基本的なデータ型のセットが定義されています。
事前定義のABAPデータ型は、さらに2つに分類が可能です。1つが、完全ABAPデータ型。もう1つが不完全ABAPデータ型です。
完全ABAPデータ型
⇒データ長も決まっているデータ型
不完全ABAPデータ型
⇒データ長が決まっていないデータ型
完全ABAPデータ型
完全ABAPデータ型は、以下の4つを覚えておけばOK。全て項目長が決まっているので、変数定義時の項目表の指定が不要です。
データ型 | 意味 | 項目長 |
---|---|---|
D | 日付(YYYYMMDD) | 8文字 |
T | 時刻(HHMMSS) | 6文字 |
I | 整数 | 4文字 |
F | 浮動小数点形式 | 8文字 |
不完全ABAPデータ型
不完全ABAPデータ型も以下の4つを押さえておきましょう。こちらは、項目長が未定ですので、変数定義時に項目長を明示する必要があります。
データ型 | 意味 | 項目長 |
---|---|---|
C | 文字列 | 1~65535 |
N | 数値 | 1~65535 |
P | 数値(小数点あり) | 1~16 |
X | 16進項目 | 1~65535 |
完全/不完全ABAPデータ型を利用したコーディング例
完全ABAPデータ型 / 不完全ABAPデータ型のコーディングの違いを見ていきましょう。
例1)不完全ABAPデータ型の場合
DATA: W_NUM(16) TYPE N. "16桁の数値
DATA: W_NUM TYPE N LENGTH 16. "16桁の数値
データ型 | 意味 | 項目長 |
---|---|---|
N | 数値 | 1~65535 |
例2)完全ABAPデータ型の場合
DATA: W_INT TYPE I. "4桁の数値
データ型 | 意味 | 項目長 |
---|---|---|
I | 整数 | 4文字 |
不完全の場合はデータの長さが定義されていないため、DATA命令中でデータ長を定義する必要があります。逆に完全データ型の場合は、変数宣言時に項目長を明示する必要はありません。
上記、例2ではデータ型は4桁の整数ということになります。
DATA命令とは「変数」を定義する命令です。VBAでいうDimです。
詳しい使い方はこちらの記事をご覧ください。
Tips:完全ABAPデータ型の項目長を明示したときの挙動
DATA : A(6) TYPE T.
上記コードのように、完全ABAPデータ型についてデータ長を記述しても、実は構文エラーにはなりません。
ただし、それは明示する項目長が事前定義された項目長と一致する場合のみ。データ長を下記のように、誤って指定してしまうとコンパイル時に警告が表示されてしまいます。
DATA : A(1) TYPE T.
※本来はT(時刻:HHMMSS・・・6文字)なので長さ1ではない!ただし、構文エラーにはならないので、めったに使うものではありません。
ABAPディクショナリデータ型
続いて2つ目のデータ型定義領域です。
これはABAPディクショナリを用いて定義するデータ型です。ABAPディクショナリ(トランザクションコード:SE11)を用いて登録されたデータはすべてABAPディクショナリデータ型です。
ABAPディクショナリデータ型は、どのプログラムからでも呼び出しが可能。(事前定義ABAPデータ型も同様です。)
ABAPディクショナリのデータ型の分類やそれぞれの設定方法は以下の記事をご覧ください。
アドオン/SAP標準を問わず「テーブル」や「データ型」といったディクショナリオブジェクトを一元的に管理する機能のこと。
ローカルデータ型
ローカルデータ型とは、TYPES命令を用いてプログラムの中でローカルに定義するデータ型です。このローカルデータ型は、その名通り他の2つのデータ型と異なり他のプログラムから参照して利用することはできません。
ローカルデータ型の定義方法は以下のページで詳しく解説しております。
SAP/ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!