【ABAP】3分で理解できる!IF/CASE―条件分岐の使い分け

ABAP

「IF文」「CASE文」と呼ばれる条件分岐命令について解説します。

決して難しい概念ではないので、初心者でもパッと使えてしまうかもしれませんが、改めてこのページでIF文/CASE文の使い分けや構文ルールをしっかり押さえておきましょう。

このページで学べる内容
  • 条件分岐とは?
  • IF文/CASE文の使い方と構文ルール
  • IF文/CASE文の使い分け・利用シーンの違い

ABAPerであれば、知らないと恥ずかしい基本知識ですので、是非最後までご覧ください。

条件分岐とは?

条件分岐とは、プログラム中である条件を満たしているかどうかを判定し、満たしている場合/満たしていない場合に応じて処理を変えることです。

基本的には、「もし○○ならば××せよ」というような書き方で処理の内容を分岐させていきます。

ABAPでは、この条件分岐を「IF~ENDIF」「CASE~ENDCASE」を用いて記述していきます。

ABAPで条件分岐を記述する命令
  • IF~ENDIF
  • CASE~ENDCASE

IF文(IF~ENDIF):構文ルール

IF(条件式1).
 処理1
 ELSEIF(条件式2).
  処理2
 ELSE.
  処理3
ENDIF.


(条件式) の結果がTRUE:真の場合にそれぞれに該当する処理が1つだけ実行されます。

IF命令の後に記載した条件式は上から下へと順次チェックされていきます。つまり、条件式が真(true)になった時点で処理が実行され、その後の条件式は比較・評価が行われないという点に注意しましょう。

どの条件にも合致しない場合は、ELSEの後に記述した処理が実行されます。

注意点としては ”IF” ”ELSEIF” ”ENDIF” の後にそれぞれピリオドが必要であるという点です。初心者の方ほど見落としがちな点ですが、ピリオドのつけ忘れは構文エラーとなりますので注意しましょう。

サンプルコード:IF文

具体的なイメージを持つために、以下にサンプルコードを載せておきます。

IF sy-subrc = 0
  MESSAGE E001(ZAMCM01).
 ELSEIF sy-subrc = 4.
  MESSAGE E001(ZAMCM02).
 ELSE.
  MESSAGE E001(ZAMCM03).
ENDIF.

上記のサンプルコードでは、システム項目「SY-SUBRC」の値に応じて表示するメッセージを変える処理を行っています。

SY-SUBRCが0の場合4の場合それ以外の場合の3つに分岐させています。

CASE文(CASE~ENDCASE):構文ルール

CASE(変数など).
 WHEN(変数の値1).
 ・・・・
 WHEN(変数の値2).
 ・・・・
 WHEN OTHERS .
 ・・・・
ENDCASE.


IF文とはことなり、CASEのオペランド部には式ではなく変数などのデータオブジェクトを指定します。また、CASEと最初のWHENの間に処理ロジックを記載することはできません。

WHENのオペランド部にはデータオブジェクトがとりうる値を指定し、データオブジェクトがそこで指定した値に合致する場合に、記載した処理が1つだけ実行されます。

IF文と同様に、上から順に条件に当てはまるかをチェックしていき、条件が合致した場合に当該処理を実行します。その後、再度条件式の評価が行われることはありません。

サンプルコード:CASE文

CASE sy-subrc.
 WHEN 0.
  MESSAGE E001(ZAMCM01).
 WHEN 4.
  MESSAGE E001(ZAMCM02).
 WHEN OTHERS.
  MESSAGE E001(ZAMCM03).
ENDCASE.

IF文のサンプルコードと構造はほぼ同じ。

SY-SUBRCが0の場合4の場合それ以外の場合の3つに分岐しています。

IF文とCASE文の使い分け

ここまでの解説でお気づきかと思いますが、IF文とCASE文は手段こそ異なりますが、目的は「条件分岐」で一致しています。

IF文かCASE文のどちらかを覚えておけば、ABAPにおける条件分岐の実装は可能です。

実際には、一般的なABAPerはCASE文よりもIF文を使って書いている人が多い印象です。そのため、IF文と比較してCASE文を見る頻度は多くありません。

ただし、CASE文を使ったほうが良い場面でIF文を使われると、コードの可読性が下がり改修やバグの調査がしづらくなります。

この章では、IF文とCASE文の使い分けについて解説をしておきます。

処理速度の違い(CASE > IF)

まず、IF文とCASE文は処理速度が違います。

IF文よりもCASE文の方が若干早く(SAP公式見解)処理が行われるようです。

処理速度の改善を行いたい場合には、IF文とCASE文の置き換えも一案になるかもしれません。ただし、SAP公式見解で「若干」という言葉を使っているので、そこまで劇的な改善は見込めないようです。

分岐の数に応じた使い分け

IF文とCASE文は、条件分岐の数に応じて使い分ける必要があります。

例えば、処理ステータスに応じて処理の内容を変える分岐を入れたいとします。

ステータスが「S:成功」「E:失敗」の二つしか存在しえない場合、これはIF文で書くのが良いでしょう。条件が二つしか存在しない場合を「二分岐」と言います。

「TRUE or FALSE」も二分岐です。本来IF文では、この二分岐の制御を行うものに用いるべき命令です。できればELSEIFを使わずに記述したほうが読みやすく、直感的に分かりやすいコードになります。

対してCASE文は、「多分岐」に向いています。

多分岐というのは、TRUE or FALSEの二択ではなく条件が3つ以上あるものをいいます。例えば、ある人の干支や、星座、年齢などでしょうか?

処理ステータスで例えれば、「S:成功」「E:失敗」に加えて、「N:未処理」「X:処理中」があるとします。

この場合、それぞれの処理ステータスに応じて、処理内容を変えたい場合、向いているのは明らかにCASE文です。「S:成功」なら〇〇をする。「E:失敗」なら□□をする。「N:未処理」なら・・・・。

もちろん、IF文でも書くことはできます。が、可読性が悪くなります。条件が4つであればまだよいですが、5個とか6個とか増えていくと実際熟練の開発者でも読みづらくなるコードになってしまうでしょう。

CASE文の方が処理速度も若干早くなるので、多分岐の場合にはできるだけCASE文を用いるようにするのが正解な印象です。

ABAPを1から勉強したい方は

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。

現在、完全無料で公開しておりますので、是非ご覧ください!

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