java - 断言可用于维护循环不变量和检查程序正确性

标签 java if-statement assertions invariants

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

但是断言可以充当维护循环不变量和程序不变量的简单衬里,以便我们可以在一定程度上检查程序的正确性。

即使我们有 if else,为什么断言也是必要的?它只是测试一个 boolean 表达式,类似的事情可以通过 if -else 梯子来完成,那么为什么还要创建一个新的关键字断言呢?

最佳答案

“程序中的任务”在上下文中意味着应该完成并且最好进行测试的事情。

不仅是:

assert p != null

比以下内容更短更简单:

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

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

当然,有时明确指定的行为正是您想要的,例如公共(public)长期 API。

换句话说,虽然它们很相似,但在 if/throw 正确的情况下使用断言有点错误,反之亦然。

尽管如此,许多 Java 代码并不关心断言,因为这样就少了一个需要做出的决定。我不确定如果它不存在的话它是否会被添加到语言中......

关于java - 断言可用于维护循环不变量和检查程序正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634192/

相关文章:

java - 使用文件模式重命名/move 多个文件

java - 如何告诉 Java 编译器不要提示某些没有被捕获或抛出的异常?

if-statement - If - Else 条件

javascript - 期待这样或那样,如何在单元测试中包含 OR

javascript - 如何使用 Chai 检查对象中的值?

c++ - 如何通过 Google 测试捕捉断言?

java - 在 Fedora 20 Linux 上启动 jdeveloper 时的 Sigenv

java - 两个线程如何进入两个持有同一对象锁的同步块(synchronized block)

ios - 使用 NsPredicate 解析查询后的 If 语句

C++ 速度和逻辑流程