Assertions可用于维护循环不变量和检查程序的正确性

时间:2015-02-20 16:55:10

标签: java if-statement assertions invariants

我最近看到了this个问题,并认为提出问题的人在某种程度上是正确的。答案告知我们不应该使用断言来执行我们程序中的任何任务。

但断言可以作为维护循环不变量和程序不变量的简单一行,因此我们可以在一定程度上检查程序的正确性。

为什么断言是必要的,即使我们还有其他?它只测试一个布尔表达式,类似于if -else梯子可以完成的事情,那么为什么还要创建一个新的关键字Assertion?

1 个答案:

答案 0 :(得分:2)

您的计划中的任务',在上下文中,意味着应该完成的任务,并进行理想的测试。

不仅是:

assert p != null

比以下更简单,更简单:

if (p == null) throw new IllegalArgumentException("p is null");

使它成为断言,清楚地记录了它是内部约束而不是指定行为的事实。因此,您不需要另外4行测试它。

当然,有时显式指定的行为你想要的东西,例如公共长期存在的API。

换句话说,虽然它们是相似的,但使用断言时,如果/ throw是正确的,那就稍微错了,反之亦然。

尽管如此,许多Java代码并不会对断言感到烦恼,因为这样做的决定就会减少。如果它不存在,我不确定它会被添加到语言中......