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中近似这种编程风格,还是我陷入了混乱?
答案 0 :(得分:21)
7.40版本带来了一大堆ABAP改进,我发现堆有趣。三元风格声明(至少类似于它的东西)就是其中之一
语法:
COND dtype|#( WHEN log_exp1 THEN result1
[ WHEN log_exp2 THEN result2 ]
...
[ ELSE resultn ] ) ...
一个名为' bool'的变量的示例数据声明。和一行中的条件值赋值。旧skool 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
答案 1 :(得分:2)
不,在ABAP中没有类似于其他语言中已知的构造a ? b : c
的运算符。但是,在具体示例中,您可以在方法的签名中声明方法参数iv_class
等的默认值。
答案 2 :(得分:1)
在声明变量时,您可以设置默认值或明确地执行以下操作。
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.