【ABAP】論理式―覚えておきたい8つの比較演算子と注意点

ABAP

このページでは、比較演算子(=、>、<)で知っておきたい比較演算子を8つ解説します。ABAPでは、数字以外にもEQやNEなどのアルファベットでも比較する場合があるので合わせて解説しておきます。

このページで学べる内容

  • 比較演算子とその使い方
  • 比較演算子に対応するアルファベット記号
  • 比較演算子を利用する場合の注意点

ABAPを学習中の人であれば、絶対に知っておきたい内容ばかりですので是非最後までご覧ください。

尚、本ページではIF文を例に用います。IF文について学習したい方はこちらからどうぞ。

=(EQ)

「=」または「EQ」は「等しい」という意味を持ちます。

「EQ」はEqualの略です。合わせて覚えておきましょう。

例1)IF SY-SUBRC= 0.

例2)IF SY-SUBRCEQ 0.


上記2つの例は、「SY-SUBRCが0であれば」という意味になります。

※SY-SUBRC(システム項目)の意味はこちらのページをご覧ください。

<>(NE)

「<>」と「NE」は「等しくない」という意味を持ちます。

ABAPでは「≠」ではなく「<>」を用います。NEは「Not Equal」の略です。

例1)IF SY-SUBRC<> 0.

例2)IF SY-SUBRCNE 0.


上記2つの例は「SY-SUBRCが0でなければ」という意味を持ちます。

>(GT)

「>」と「GT」は「~より大きい」ことを示します。後述しますが、「~以上」とは区別する必要があるので注意が必要です。

GTは「Greater Than」の略です。

例1)IF A> 100.

例2)IF AGT 100.


これらは、「Aが100より大きければ」という意味になります。

>=(GE)

「>」のあとに「=」を付けることで、「~以上」という意味になります。

GEは「Greater or Equal」の略です。

例1)IF A>= 0.

例2)IF AGE 0.


例は、0以上の場合、すなわちABAPにおいて変数の正負判定を行う場合によく用いられるコードです。

日本語に直せば「Aが0以上であれば」「Aが正の場合は」という意味になります。

<(LT)

「<」と「LT」は、「~より小さい」という意味を表します。

LTは「Less Than」の略です。

例1)IF A< 0.

例2)IF A LT 0.


「Aが0より小さければ」「Aが負の場合は」という意味になります。

<=(LE)

「<=」と「LE」は、「~以下」という意味を表します。

LEは「Less or Equal」の略です。

例1)IF A<= 0.

例2)IF A LE 0.


「>= / GE」とセットで用いられ、「Aが負の場合は」という意味になります。

BETWEEN A AND B

BETWEEN A AND B」は、AとBの間であることを表します。

これは、符号で表すことはできません。

※ここまで解説してきた、符号の組み合わせでも実現できますが、直感的にわかりやすいので、BETWEEN比較的よく用いられます。

例)IF ABETWEEN 0 AND100.


例は「Aが0~100の値であれば」ということを表します。

IS INITIAL

「IS INITIAL」は、対象の変数に格納されている値が初期値であることを表します。

よく「IS INITIAL」は対象の変数の値が「ブランクであること」を指し示すと勘違いしている人がいます。正しくは、「初期値であること」を示します

すなわち、「DATA A TYPE B.」であれば、変数の初期値はブランクとなりますが、「DATA A TYPE B VALUE `00`.」とした場合初期値は「00」であって、ブランクではありません。

IS INITIALはこの点に注意して理解しましょう。また。「BETWEEN A AND B」と同様、符号で表すことはできませんので合わせて覚えておきましょう。

例)IF AIS INITIAL.


ちなみに、初期値でないことを表現したい場合は

IF A IS NOT INITIAL.


とします。これらはどちらも頻繁に用いられますので、しっかり覚えておきましょう。

比較演算子利用の場合の注意点①

ここからは比較演算子を用いる場合の知っておきたい注意点をまとめます。

数字の比較はイメージしやすいかと思いますが、例えば文字列の比較、日付、時刻の比較の場合の原則についてもイメージできるようにしておきましょう。

文字列の同士の比較

比較するものが、文字列同士の場合は「アルファベット順」で内容が比較されます。


例)
DATA : ZC1 TYPE C VALUE a,
    ZC2 TYPE C VALUE b.
IF ZC1 > ZC2.
・・・・


この場合、IF文の結果(SY-SYBRC)はどうなるでしょうか?

答えは「SY-SYBRC=4」となります。アルファベットでは、Aから順にZまで大きいと判断されるためです。

日付・時刻同士の比較

日付・時刻同士の比較は、後の日付・時刻であればあるほど大きいと判断されます。

アルファベットと時間については、イメージしづらい部分もあるかと思いますが、慣れてくれば簡単です。

比較演算子利用の場合の注意点②

比較演算子を利用する場合、データ型、可読性の観点から以下の2点に注意しましょう。

符号かアルファベット 両者を併用しない

比較演算子は、「=」であれば「EQ」と同様、「<>」であれば「NE」と同様であると解説しました。

基本的には、どちらを使っても処理の内容は同じですが、可読性向上のためどちらか一方に統一して使うようにしましょう。

基本的には符号の方が分かりやすいという人が多いので、符号のみを利用することになるかと思います。

データ型が異なる者同士を利用しない

例えば、AとB、二つの変数を比較するとします。

このとき、Aは文字型、Bは日付型だったとします。

結果はどうなるでしょうか?

答えは、「比較するデータ型に応じて結果が異なる」となります。つまり、比較するデータ型の組み合わせに応じて、ABAP内部で複雑な処理を伴う比較を行うのです。

とは言え、そこまでABAP内部での処理について知る必要性は少ないですし、もっと言うと知ろうとしてもかなり難しいです。

したがって、基本的には「データ型が異なる変数同士を比較しない」ようにするのが無難です。

※ABAPのデータ型の理解は、こちらのページでの学習がおすすめです。

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