功能运算符COND与IF?

2020-09-03 14:52发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我喜欢在日常编码中使用ABAP功...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我喜欢在日常编码中使用ABAP功能运算符,但有时我质疑此类编码块的可读性(简洁性)。

我目前所拥有的:

 R_RESULT
 = cond#(
     当I_PARAM初始时
          和UTILITY-> FOO()<> IF_ENUM => CONSTANT-UNDEFINED
       然后抛出CX_ERROR(消息E004(MSG_CLS))
     当I_PARAM不是初始的
       然后cond#(当I_SOME_FLAG = ABAP_TRUE
                      然后抛出CX_ERROR(消息E006(MSG_CLS)与I_PARAM)
                    其他ABAP_TRUE))。

我可以使用IF以旧的详细方式重写代码:

如果I_PARAM是初始的
    和UTILITY-> FOO()<> IF_ENUM => CONSTANT-UNDEFINED。
   引发异常类型CX_ERROR消息E004(MSG_CLS)。
 else I_PARAM不是初始的。
   如果I_SOME_FLAG = ABAP_TRUE。
     使用I_PARAM引发异常类型CX_ERROR消息E006(MSG_CLS)。
   其他。
     R_RESULT = ABAP_TRUE。
   万一。
 endif。

IMO,第一个代码段是" cleaner",因为乍一看,我可以看到该COND功能块仅向我返回R_RESULT。 在第二个片段中,情况并非如此。

我想听听您对此的看法。

BR,

苏哈斯

3条回答
落灬小鱼
2020-09-03 15:10 .采纳回答

我使用构造函数表达式的原因恰恰是您提到的原因:"乍一看,我看到此COND功能块仅向我返回R_RESULT"-并且避免与所有中间变量混淆。

潜在的 构造表达式的复杂性经常被批评,但这通常是因为开发人员还不习惯与它们合作。 我会毫不犹豫地使用复杂的表达式来避免所有中间变量(并表明目标仅是初始化一个变量)。 如果开发人员不清楚,自动化的单元测试应该有助于理解复杂的构造表达式的功能。 当然,我认为复杂性是一个不应该达到的极限,但我不能告诉我们如何定义它。

PS:也许您的例子并不是说明您问题的最佳例子:我 会保留旧方法,因为条件仅是引发异常,然后返回的值仅表示没有异常。 一个更好的例子是R_RESULT = ABAP_FALSE,而不是两个RAISE EXCEPTION TYPE。

EDIT:在您的评论和Jelena的评论之后,我意识到我对条件的理解不佳,您为false或 true或引发异常。 也许一种更好的风格是,首先关注您分配的值,因为这全都与构造函数表达式有关,并且仅在其他情况下(例如,当...则为abap_true时,然后为abap_false否则为ELSE THROW异常)才引发异常。 我认为COND内的Throw异常是为了确定ELSE中的异常情况,主要目的是在THEN中,所以您所做的与之相反。 在您的示例中,以经典方式查看它可能会更"干净",因为如果IF作为分支条件工作,则此后您可以执行任何操作。 使用COND,应该明确其目的:建立返回值(R_RESULT = true或false)或确定异常。

一周热门 更多>