ABAP

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

このページでは、比較演算子(=、>、<)で知っておきたい比較演算子を8つ解説します。

ABAPでは、数字以外にもEQやNEなどのアルファベットでも比較する場合があるので合わせて解説しておきます。

※ただし、アルファベットは可読性が低いためあまり用いられません。

基本的には、IF文/CASE文とセットで利用する場面が多いので合わせてIF文の基礎知識も抑えておきましょう。

ページ後半では、比較演算子を利用する場合の注意点もまとめています。

早速解説を始めます。

= / EQ

「=」または「EQ」は「等しい」という意味を持ちます。(簡単ですね。)

「EQ」は、Equalの略である、と覚えておきましょう。

例1)IF SY-SUBRC = 0.

例2)IF SY-SUBRC EQ 0.

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

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

<> / NE

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

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

例1)IF SY-SUBRC <> 0.

例2)IF SY-SUBRC NE 0.

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

> / GT

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

GTは「Greater Than」の略です。

例1)IF A > 100.

例2)IF A GT 100.

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

>= / GE

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

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

例1)IF A >= 0.

例2)IF A GE 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 A BETWEEN 0 AND 100.

例は「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 A IS INITIAL.

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

IF A IS NOT INITIAL.

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

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

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

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

文字列の同士の比較

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

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

この場合、IF文は成り立つでしょうか?

答えはNOです。アルファベットでは、Aから順にZまで大きいと判断されます。

日付・時刻同士の比較

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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