云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

虚拟主机_layercdn_限量秒杀

小七 141 0

一些组织根本不使用代码检查器(甚至扩展语法检查)。另一些人发疯了,坚持每一个警告都要被压制。

我倾向于后一种方法。当然你可以得到假阳性,但是你可以用pragma来抑制真的假阳性。有些人用pragmas抑制一切,不管是否合适,但那是另一回事。

现在是时候谈谈CHECK语句的正确用法了–mate。

我们在工作中遇到的一个论点是关于代码检查器中的3级(信息)警告,它说"只在正确的时间使用CHECK语句"开始例行程序或循环。否则使用"返回"。你可以在新的"Clean ABAP"指南中看到类似的建议。

大概逻辑是CHECK语句在不同位置的行为不同–即在循环外,故障的行为类似于返回,物联网大会,在一个循环中,一个失败会把你带到循环中的下一个条目。

我认为逻辑是,你的代码的普通读者太笨了,无法理解其中的区别,可能会认为循环中检查的负面结果可能会退出整个例程。

可能是允许的例外-在开始时就进行检查(我称之为前提条件)是可以的,物联网设备,因为更明显的是,一个失败将在它开始之前退出例程。

然而,相反的论点沿着我们有矛盾的指导方针的路线运行。另外两个准则它们是:-

方法尽量简短。这使得代码更容易阅读/理解,因此更容易维护。

试着用肯定的词组表达你的逻辑条件,例如如果MONSTER\u是疯的()EQ ABAP\u TRUE,淘客易,而不是如果MONSTER\u不是疯的()EQ ABAP\u FALSE。同样的逻辑是,肯定形式更容易理解,因此代码更容易维护。

还有一个隐含的规则,大数据趋势,从来没有在任何地方说明,读起来像纯英语的代码比读起来像机器代码的代码更容易理解。

所以我现在正在看我系统中的一些代码,在接近结尾处(方法中22行中的第11行)写着

CHECK lf\u order\u cancellation EQ abap\u true.

现在据我所知,我应该把它改为:-

IF lf\u order\u cancellation EQ abap\u false.

RETURN.

ENDIF.

这违反了另外两个规则-它会使代码变长,并将阳性检查改为阴性检查一、情况可能更糟。我可以把

CHECK I want I want I to I cancel I U the I U order()。

改为

IF I want I want I U to I U cancel I U ther I U order()=abap I U false.

RETURN.

ENDIF.

它把一个读起来100%像纯英语的语句变成一个充满编程语言结构的语句。

第二,如果我的方法的开头(前3行)读到了什么像

用parvw='AG'键将表it\u partner\u details读入数据(ls\u partner\u details)。

检查sy–subrc EQ 0.

然后我会得到一个警告,因为检查不在开始处。

如果我有需要清除的导出参数,则相同。通常情况下,秒单客返利机器人,它们在第一行被清除,而支票在下一行被清除,这也会导致警告。

那么在最后一行的这个呢方法:-

rf\ U yes\ U it\ U has=abap\ U true.

检查lo\ U初始\ U状态->ms\ U头\ U数据=mo\ U sf->ms\ U头\ U数据。选中lo\ u initial\ u state->ms\ u item\ u overview\ u data=mo\ u sf->ms\ u item\ u overview\ u data。选中lo\u initial\u state->ms\u sales\u tab\u data=mo\u sf->ms\u sales\u tab\u data。选中lo\ u initial\ u state->mt\ u item\ u details=mo\ u sf->mt\ u item\ u details。选中lo\u initial\u state->mt\u partners=mo\u sf->mt\u partners。检查lo\ U初始\ U状态->mt\ U internal\ U note=mo\ U sf->mt\ U internal\ U note。勾选lo\ U initial\ U state->mt\ U header\ U note=mo\ U sf->mt\ U header\ U note.

"交易开始后没有任何变化rf\u yes\u it\u has=abap\u false.

要遵守规则,必须成为:-

rf\ U yes\ it\ U has=abap\ U true。

如果lo\ U初始\ U状态->ms\ U头\数据NE mo\ U sf->ms\ U头\ U数据。返回。ENDIF.

IF lou initial\u state->ms\u item\u overview\u data NE mo\u sf->ms\u item\u overview\u data如果处于初始\u状态->ms\u项目\u概览\u数据。返回。ENDIF.

IF lo\ u initial\ u state->ms\ u sales\ u tab\ u data NE mo\ u sf->ms\ u sales\ u tab\ u data如果初始\ u状态->ms\ u销售\ u tab\ u数据。返回。ENDIF.

IF lou initial\u state->mt\u item\u details NE mo\u sf->mt\u item\u details如果初始\u状态->mt\u项目详细信息。返回。ENDIF.

IF lou initial\u state->mt\u partners NE mo\u sf->mt\u partners如果没有初始状态->mt\u partners。返回。ENDIF.

IF lou initial\u state->mt\u internal\u note NE mo\u sf->mt\u internal\u note如果初始状态->mt\u内部注释,则结束。返回。ENDIF.

IF lou initial\u state->mt\u header\u note NE mo\u sf->mt\u header\u note如果是lou initial\u state->mt\u header\u note。返回。ENDIF.

"交易开始后没有任何变化rf\u yes\u it\u has=abap\u false.

这如何让我的生活变得更好?它几乎将方法的长度增加了一倍,将阳性测试变成了阴性测试,如果在将来的某个时候我需要添加其他需要比较的内容,那么我将无法在一个屏幕上看到所有内容。

我知道这种事情会引起令人惊讶的情绪反应,所以我很想知道ABAP编程界的其他人对这个问题的看法