サーチ…


IF / ELSEIF / ELSE

IF lv_foo = 3.
  WRITE: / 'lv_foo is 3'.
ELSEIF lv_foo = 5.
  WRITE: / 'lv_foo is 5'.
ELSE.
  WRITE: / 'lv_foo is neither 3 nor 5'.
ENDIF.

場合

CASE lv_foo.
  WHEN 1.
    WRITE: / 'lv_foo is 1'.
  WHEN 2.
    WRITE: / 'lv_foo is 2'.
  WHEN 3.
    WRITE: / 'lv_foo is 3'.
  WHEN OTHERS.
    WRITE: / 'lv_foo is something else'.
ENDCASE

チェック

CHECKは論理式を評価し、現在の処理ブロックが偽であればそれを終了する単純なステートメントです。

METHOD do_something.
  CHECK iv_input IS NOT INITIAL. "Exits method immediately if iv_input is initial

  "The rest of the method is only executed if iv_input is not initial
ENDMETHOD.  

アサート

ASSERTは、変数が特定の値を持っていることを絶対に確信したい敏感な領域で使用されます。 ASSERT後の論理条件が偽であると判明した場合、処理不能な例外( ASSERTION_FAILED )がスローされます。

ASSERT 1 = 1. "No Problem - Program continues

ASSERT 1 = 2. "ERROR

コンド/スイッチ

SWITCHおよびCONDは、特別な形式の条件付きプログラムフローを提供します。 IFおよびCASEとは異なり、文を実行するのではなく、式に基づいて異なる値を再提示します。そういうわけで、彼らは機能として数えるのです。

コンドーム

複数の条件を考慮する必要があるときはいつでも、 CONDはその仕事をすることができます。構文はかなり単純です:

COND <type>( 
    WHEN <condition> THEN <value> 
    ... 
    [ ELSE <default> | throw <exception> ]
).

" Set screen element active depending on radio button
screen-active = COND i(
    WHEN p_radio = abap_true THEN 1
    ELSE 0 " optional, because type 'i' defaults to zero
).

" Check how two operands are related to each other
" COND determines its type from rw_compare
rw_compare = COND #( 
    WHEN op1 < op2 THEN 'LT'
    WHEN op1 = op2 THEN 'EQ'
    WHEN op1 > op2 THEN 'GT' 
).

スイッチ

SWITCHは、等価のみをチェックするので、値をマッピングするためのきれいなツールであるため、場合によってはCONDよりも短くなります。予期しない入力があった場合は、例外をスローすることもできます。構文は少し異なります:

SWITCH <type>( 
    <variable>
    WHEN <value> THEN <new_value> 
    ... 
    [ ELSE <default> | throw <exception> ]
).

DATA(lw_language) = SWITCH string(
    sy-langu
    WHEN 'E' THEN 'English'
    WHEN 'D' THEN 'German'
    " ...
    ELSE THROW cx_sy_conversion_unknown_langu( )
).


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow