PR

【ABAP】比較演算子(論理式)の使い方を3分で解説

ABAP

このページでは、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、など)である場合に真
このページで学べる内容
  • ABAP:比較演算子の種類と使い方
  • 比較演算子を利用したサンプルコード
  • 比較演算子を利用する際の注意点

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をはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました