三元运营商(替代方案)

Lil*_*hal 11 sap abap

ABAP语法中是否有三元或条件运算符?我没有找到一个,所以假设答案是否定的,那么我是否有一个替代方案可以用来清理IF我经常使用的常见"哑" 语句?

例如,考虑一种使用可选消息参数记录消息的方法.要决定使用导入的参数还是默认值,我必须像这样检查值:

IF iv_class IS INITIAL.
    lv_message_class = 'DEFAULT'.
ELSE.
    lv_message_class = iv_class.
ENDIF.
IF iv_number IS INITIAL.
    lv_message_number = '000'.
ELSE.
    lv_message_number = iv_number.
ENDIF.
IF iv_type IS INITIAL.
    lv_message_type = 'E'.
ELSE.
    lv_message_type = iv_type.
ENDIF.
Run Code Online (Sandbox Code Playgroud)

三元运算符会将这五行语句中的每一个都减少为单行,如下面的代码块所示.当操作员在线使用时,它甚至可以不需要使用临时变量.

lv_message_class  = iv_class  IS INITIAL ? 'DEFAULT' : iv_class.
lv_message_number = iv_number IS INITIAL ? '000'     : iv_number .
lv_message_type   = iv_type   IS INITIAL ? 'E'       : iv_type   .
Run Code Online (Sandbox Code Playgroud)

有没有办法在ABAP中近似这种编程风格,还是我陷入了混乱?

Jor*_*org 22

版本7.40带来了一大堆ABAP改进,我发现堆有趣.三元风格声明(至少类似于它的东西)就是其中之一

句法:

COND dtype|#( WHEN log_exp1 THEN result1 
            [ WHEN log_exp2 THEN result2 ] 
            ... 
            [ ELSE resultn ] ) ...
Run Code Online (Sandbox Code Playgroud)

名为'bool'的变量的示例数据声明和一行中的条件值赋值.旧skool ABAP这将需要10行.

DATA(bool) = COND #( WHEN i * i > number THEN abap_true ELSE abap_false ).
Run Code Online (Sandbox Code Playgroud)

更多信息:http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740

  • 嘿,“Data(bool) = xsdbool( i * i > number )”怎么样?这不是三元,但很短(至少对于 ABAP 来说) (3认同)