ABAP-新語法 COND/SWITCH

衆所周知,ABAP提供了新語法COND/SWITCH,可以用來給變量賦值,代替if以及case when,使得代碼更加簡潔。

一般情況下,在我們主觀意願上來說,以下代碼,看似是等價的。

IF lv_str IS INITIAL.
  lv_str = 'new value'.
ENDIF.
lv_str = COND #WHEN lv_str IS INITIAL THEN 'new value' ).

但是其實不是,因爲COND when 只是定義了lv_str 爲空時候的賦值,那麼變量本身就有值呢?

答案是,會給一個空值。

至此,我們就發現了一個小BUG,所以新語法轉化爲舊的語法,是這樣的,

IF lv_str IS INITIAL.
  lv_str 'new value'.
ELSE.
  lv_str ''.
ENDIF.

這顯然會與我們的初衷背道而馳,解決的方式也很簡單,那就是定義好COND的所有條件。

lv_str = COND #( WHEN lv_str IS INITIAL THEN 'new value' ELSE lv_str ).

這樣一來,我們便不會丟失原始的值了。

SWITCH的語法和COND道理相同。

複製代碼
"New
lv_str = SWITCH #( n WHEN 1 THEN 'A'
                     WHEN 2 THEN 'B' ).

"Old
CASE n.
    WHEN 1.      lv_str = 'A'.
    WHEN 2.      lv_str = 'B'.
    WHEN OTHERS. lv_str = ''.
ENDCASE.
複製代碼

這是一個比較小的點,但是往往這些不引人注目的點,會帶來較大的BUG。

轉載:https://www.cnblogs.com/yibing-jia/p/14212557.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章