このページでは、ABAPにおける比較演算子(=、>、<)を8つ解説します。
比較演算子は、2つの値を比較して、その結果に基づいて論理判断を行います。以下に、ABAPで使用される主な比較演算子を解説します。
演算子 | ABAP表記 | 説明 |
---|---|---|
= | EQ | オペランドが等しい場合に真 |
<> | NE | オペランドが等しくない場合に真 |
> | GT | オペランド1がオペランド2より大きい場合に真 |
< | LT | オペランド1がオペランド2より小さい場合に真 |
>= | GE | オペランド1がオペランド2以上の場合に真 |
<= | LE | オペランド1がオペランド2以下の場合に真 |
BETWEEN | オペランド1がオペランド2とオペランド3の範囲内にある場合に真 | |
IS INITIAL | オペランドが初期値(空文字列、0、など)である場合に真 |
SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。
ABAP:比較演算子とは?
ABAPの比較演算子は、値の比較に使われる演算子で、真偽値を返します。
主な比較演算子には、等しい(=, EQ)、等しくない(<>, NE)、大小関係(>, <, >=, <=)や範囲(BETWEEN)、初期値判定(IS INITIAL)があります。これらは条件分岐やループで使用されます。
演算子 | ABAP表記 | 説明 |
---|---|---|
= | EQ | オペランドが等しい場合に真 |
<> | NE | オペランドが等しくない場合に真 |
> | GT | オペランド1がオペランド2より大きい場合に真 |
< | LT | オペランド1がオペランド2より小さい場合に真 |
>= | GE | オペランド1がオペランド2以上の場合に真 |
<= | LE | オペランド1がオペランド2以下の場合に真 |
BETWEEN | オペランド1がオペランド2とオペランド3の範囲内にある場合に真 | |
IS INITIAL | オペランドが初期値(空文字列、0、など)である場合に真 |
このページではそれぞれの比較演算子の使い方を1つずつサンプルコード付きで解説していきます。
=(EQ)
「=」または「EQ」は「等しい」という意味を持ちます。
「EQ」はEqualの略です。
REPORT demo_equality. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 42. * Using "=" IF number1 = number2. WRITE: 'Using "=": number1 is equal to number2'. ENDIF. * Using "EQ" IF number1 EQ number2. WRITE: / 'Using "EQ": number1 is equal to number2'. ENDIF.
このサンプルコードでは、二つの整数変数number1とnumber2が等しいかどうかを、「=」と「EQ」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
参考 DATA命令 / VALUEオプション / IF文 / WRITE命令
<>(NE)
「<>」と「NE」は「等しくない」という意味を持ちます。
ABAPでは「≠」ではなく「<>」を用います。NEは「Not Equal」の略です。
REPORT demo_inequality. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 50. * Using "<>" IF number1 <> number2. WRITE: 'Using "<>": number1 is not equal to number2'. ENDIF. * Using "NE" IF number1 NE number2. WRITE: / 'Using "NE": number1 is not equal to number2'. ENDIF.
このサンプルコードでは、二つの整数変数number1とnumber2が等しくないかどうかを、「<>」と「NE」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
>(GT)
「>」と「GT」は「~より大きい」ことを示します。後述しますが、「~以上」とは区別する必要があるので注意が必要です。
GTは「Greater Than」の略です。
REPORT demo_greater_than. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 30. * Using ">" IF number1 > number2. WRITE: 'Using ">": number1 is greater than number2'. ENDIF. * Using "GT" IF number1 GT number2. WRITE: / 'Using "GT": number1 is greater than number2'. ENDIF.
このサンプルコードでは、二つの整数変数number1とnumber2の大小関係を、「>」と「GT」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
>=(GE)
「>」のあとに「=」を付けることで、「~以上」という意味になります。
GEは「Greater or Equal」の略です。
REPORT demo_greater_than_or_equal. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 42, number3 TYPE i VALUE 30. * Using ">=" IF number1 >= number2. WRITE: 'Using ">=": number1 is greater than or equal to number2'. ENDIF. * Using "GE" IF number1 GE number3. WRITE: / 'Using "GE": number1 is greater than or equal to number3'. ENDIF.
このサンプルコードでは、二つの整数変数number1、number2およびnumber3の大小関係を、「>=」と「GE」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
<(LT)
「<」と「LT」は、「~より小さい」という意味を表します。
LTは「Less Than」の略です。
REPORT demo_less_than. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 50. * Using "<" IF number1 < number2. WRITE: 'Using "<": number1 is less than number2'. ENDIF. * Using "LT" IF number1 LT number2. WRITE: / 'Using "LT": number1 is less than number2'. ENDIF.
このサンプルコードでは、二つの整数変数number1とnumber2の大小関係を、「<」と「LT」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
<=(LE)
「<=」と「LE」は、「~以下」という意味を表します。
LEは「Less or Equal」の略です。
REPORT demo_less_than_or_equal. DATA: number1 TYPE i VALUE 42, number2 TYPE i VALUE 42, number3 TYPE i VALUE 50. * Using "<=" IF number1 <= number2. WRITE: 'Using "<=": number1 is less than or equal to number2'. ENDIF. * Using "LE" IF number1 LE number3. WRITE: / 'Using "LE": number1 is less than or equal to number3'. ENDIF.
このサンプルコードでは、二つの整数変数number1、number2およびnumber3の大小関係を、「<=」と「LE」の両方の表記法で評価しています。両方の方法で同じ結果が得られます。
BETWEEN
「BETWEEN」は、AとBの間であることを表します。
これは、符号で表すことはできません。
ここまで解説してきた、符号の組み合わせでも実現できますが、直感的にわかりやすいので、BETWEEN比較的よく用いられます。
REPORT demo_between. DATA: age TYPE i VALUE 25, lower_limit TYPE i VALUE 18, upper_limit TYPE i VALUE 30. IF age BETWEEN lower_limit AND upper_limit. WRITE: 'The age is between the lower and upper limits'. ENDIF.
このサンプルコードでは、整数変数ageがlower_limitとupper_limitの範囲内にあるかどうかを評価しています。この条件が真の場合、「The age is between the lower and upper limits」と出力されます。
IS INITIAL
「IS INITIAL」は、対象の変数に格納されている値が初期値であることを表します。
よく「IS INITIAL」は対象の変数の値が「ブランクであること」を指し示すと勘違いしている人がいます。正しくは、「初期値であること」を示します。
すなわち、「DATA A TYPE B.」であれば、変数の初期値はブランクとなりますが、「DATA A TYPE B VALUE `00`.」とした場合初期値は「00」であって、ブランクではありません。
IS INITIALはこの点に注意して理解しましょう。また。「BETWEEN A AND B」と同様、符号で表すことはできませんので合わせて覚えておきましょう。
REPORT demo_is_initial. DATA: name TYPE string, age TYPE i VALUE 25. * Check if name is initial IF name IS INITIAL. WRITE: 'Name is not set'. ENDIF. * Check if age is initial IF age IS INITIAL. WRITE: / 'Age is not set'. ELSE. WRITE: / 'Age is set'. ENDIF.
このサンプルコードでは、string型の変数nameと整数型の変数ageが初期値かどうかを判定しています。nameは初期値であるため、「Name is not set」と出力され、ageは初期値ではないため、「Age is set」と出力されます。
比較演算子利用時の注意点
ABAPの比較演算子を利用する際の注意点を以下に示します。
注意点 | 説明 |
---|---|
型の違い | 異なるデータ型のオペランドを比較する際、暗黙的な型変換が行われることがある。適切な型変換を行う必要がある、 |
ケース | 文字列の比較では、大文字と小文字が区別される。必要に応じて、CASE-SENSITIVEやCASE-INSENSITIVEキーワードを使用。 |
初期値とNULL | 初期値は空文字列や0など、データ型によって定まる値。NULL値は未定義の状態。適切な方法で初期値とNULL値を区別。 |
数値と文字列 | 数値と文字列を比較する場合、文字列が数値に変換される。変換できない文字列がある場合、エラーが発生することがある。 |
型の違いに注意
型の違いを意識できていない場合、意図しない型変換が行われ、比較結果が予期しないものになることがあります。
DATA: number TYPE i VALUE 42, text TYPE string VALUE '42'. IF number = text. " 暗黙的に型変換が行われ、真になる WRITE: 'Unexpectedly equal'. ENDIF.
大文字/小文字の違いに注意
大文字小文字の区別をしていない場合、意図しない比較結果が得られることがあります。
DATA: text1 TYPE string VALUE 'Abap', text2 TYPE string VALUE 'ABAP'. IF text1 = text2. " 大文字小文字が区別されるため、偽になる WRITE: 'Unexpectedly not equal'. ENDIF.
初期値とNULL値の違いに注意
初期値とNULL値を区別せずに比較してしまうと、意図しない結果が得られることがあります。
DATA: text TYPE string. IF text IS INITIAL. " 真になりますが、NULL値と初期値を区別できません WRITE: 'Value is initial or NULL'. ENDIF.
数字と文字列の比較に注意
数値と文字列の比較で型変換が適切に行われない場合、エラーが発生することがあります。
DATA: number TYPE i VALUE 42, text TYPE string VALUE 'abc'. " 数値に変換できない文字列 IF number = text. " 型変換エラーが発生する可能性があります WRITE: 'Unexpectedly equal'. ENDIF.
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!