ABAPにおいて、条件分岐は以下で行います。
★IF
*IF~ELSE~ENDIF。Aか非Aかで分岐させたいときにどうぞ。
IF lv_test01 = 'ABC'.
"lv_test01の値が「ABC」だった場合の処理
ELSE.
"lv_test01の値が「ABC」でなかった場合の処理
ENDIF.
*ELSEIFを使用すると、単純な2分岐より分岐を増やせます。
*複数の分岐条件に合致する場合は、最初の分岐内の処理を実行した後
*IF文を抜けてしまうため、注意です。
IF lv_test01 = 'ABC'.
"lv_test01の値が「ABC」だった場合の処理
ELSEIF lv_test01 = 'DEF'
OR lv_test01 = 'GHI'.
"lv_test01の値が「DEF]か「GHI」のどちらかの場合の処理
ELSE.
"lv_test01の値が本IF文のどの条件にも合致しない場合の処理
ENDIF.
★CASE
*CASE~WHEN~ENDCASE。評価対象が1つのみの場合で分岐させたいときにどうぞ。
*複数の分岐条件に合致する場合は、最初の分岐内の処理を実行した後
*CASE文を抜けてしまうため、注意です。
CASE lv_test01.
WHEN 'ABC'.
"lv_test01の値が「ABC」だった場合の処理
WHEN 'DEF' OR 'GHI'.
"lv_test01の値が「DEF]か「GHI」のどちらかの場合の処理
WHEN OTHERS.
"lv_test01の値がどのWHEN条件にも合致しない場合
ENDCASE.
*CASEで指定するのは変数でないものでもできるので、
*以下のようにどのフラグがONになっているかで処理を分けることが可能。
CASE abap_on.
WHEN lv_flag01.
"lv_flag01が'X'の場合の処理
WHEN lv_flag02.
"lv_flag02が'X'の場合の処理
WHEN lv_flag03.
"lv_flag03が'X'の場合の処理
WHEN OTHERS.
"どのフラグも'X'でない場合の処理
ENDCASE.
★CONDやSWITCH(ABAP7.4以降で可能)
*ABAP7.4以降では一つの変数に代入する値を以下の構文で制御可能。
DATA(lv_string) = COND STRING( WHEN lv_test01 = 'ABC' THEN 'OK'
WHEN lv_test01 = 'DEF' THEN 'NG' ).
DATA(lv_string) = SWITCH STRING( lv_test01 WHEN 'ABC' THEN 'OK'
WHEN 'DEF' THEN 'NG'
ELSE THROW zcx_error( ) ).
*※上記のようにSWITCHでは例外を投げることも可能。


