Abap 三元运算符(可选)

Abap 三元运算符(可选),abap,Abap,ABAP语法中是否有三元运算符或条件运算符?我还没有找到答案,所以我假设答案是否定的,但有没有其他方法可以用来清除我经常使用的常见“dumb”IF语句 例如,考虑一种记录具有可选消息参数的消息的方法。要决定使用导入的参数还是默认参数,我必须检查如下值: IF iv_class IS INITIAL. lv_message_class = 'DEFAULT'. ELSE. lv_message_class = iv_class. ENDIF. IF iv_number IS INI

ABAP语法中是否有三元运算符或条件运算符?我还没有找到答案,所以我假设答案是否定的,但有没有其他方法可以用来清除我经常使用的常见“dumb”
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中有没有一种近似这种编程风格的方法,或者我被混乱所困扰?

没有,在ABAP中没有类似于构造
a的操作符?b:c
从其他语言中了解。然而,在您的具体示例中,您可以在方法的签名中声明方法参数的默认值。

<7.40版带来了一系列ABAP改进,我发现这些改进非常有趣。三元风格声明(至少与之类似)就是其中之一

语法:

COND dtype|#( WHEN log_exp1 THEN result1 
            [ WHEN log_exp2 THEN result2 ] 
            ... 
            [ ELSE resultn ] ) ...
名为“bool”的变量的示例数据声明和一行中的条件值赋值。老斯库尔阿巴普这将需要大约10行

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

更多信息:

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

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.

迁移到7.4之后,我可以确认这是完美的,即使语法高亮显示将语句的部分标记为无效的红色。注意,这并不局限于声明新变量,任何值赋值都可以使用
COND
语句。嘿,
Data(bool)=xsdbool(i*i>number)呢?这不是三元数,但它相当短(至少对于ABAP而言)