三元运算符(替代)



是否有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.

三元操作符可以将这些五行语句中的每一行简化为一行,如下面的代码块所示。当操作符内联使用时,它甚至可以使临时变量的使用变得不必要。

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   .

在ABAP中是否有一种近似这种编程风格的方法,或者我是否陷入了混乱?

Release 7.40带来了一大堆ABAP改进,我觉得很有趣。三元风格声明(至少类似于它)就是其中之一

语法:

COND dtype|#( WHEN log_exp1 THEN result1 
            [ WHEN log_exp2 THEN result2 ] 
            ... 
            [ ELSE resultn ] ) ...

一个名为bool的变量的示例数据声明和一个条件值赋值在一行中。旧的ABAP程序需要10行。

DATA(bool) = COND #( WHEN i * i > number THEN abap_true ELSE abap_false ).

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

不,在ABAP中没有类似于其他语言中已知的a ? b : c结构的操作符。但是,在具体示例中,您可以在方法签名中声明方法参数iv_class等的默认值。

在声明变量时,您可以设置默认值或显式地执行如下操作。

lv_message_class = 'DEFAULT'.
lv_message_number = '000'.
lv_message_type = 'E'.
IF iv_class IS NOT INITIAL.
    lv_message_class = iv_class.
ENDIF.
IF iv_number IS NOT INITIAL.
    lv_message_number = iv_number.
ENDIF.
IF iv_type IS NOT INITIAL.
    lv_message_type = iv_type.
ENDIF.

相关内容

  • 没有找到相关文章

最新更新