我有一个后置条件,我想通过多种方法定期检查。我相当有信心我正确地使用了断言,即只检查一些东西以确保我的代码没有做任何愚蠢的事情,并且我打算在一段时间后关闭断言。但我不确定我现在写的后置条件是否正是我一直想要的条件。所以我把它变成了一个方法。但是后来我遇到了以下问题:
public class Foo
{
public void doSomethingRisky()
{
//...
assert someBoolean();
}
private boolean someBoolean()
{
return bar && baz;
}
}
对比
public class Foo
{
public void doSomethingRisky()
{
//...
verifySomeBoolean();
}
private void verifySomeBoolean()
{
assert bar && baz;
}
}
我知道如果我用禁用的断言编译,以前的代码不会有性能影响,因为someBoolean()
永远不会被调用。但是,Java 是否足够“智能”,以至于在禁用断言的情况下,第二种形式在禁用断言的情况下也不会对性能造成影响?
显然,更重要的问题是哪种做法更好?
我喜欢它,assert someBoolean()
因为它是明确的,不受重新或误解的影响,但似乎另一种形式可能更适合未来证明,因为verifySomeBoolean()
除了断言相同的基础之外,我可能还想扩展做某事的行为布尔值。虽然我的直觉说如果是这样的话,我最好重新编码而不是试图弄脏旧代码以适应。智者的话将不胜感激。