【问题标题】:Should conditions test for positive or negative results?条件应该测试阳性还是阴性结果?
【发布时间】:2012-10-01 06:09:30
【问题描述】:

对不起,如果标题有点模棱两可,我不知道如何措辞。

是更好地表述一个条件,使您不想要的结果进入 if 语句然后退出函数,或者我应该测试我想要的结果并使用我的代码遵循语句。

也许一些例子会有所帮助:

我所说的测试阴性结果是什么意思:

if(myObject == null) {
    return;
}

//do whatever with myObject

我所说的阳性结果是什么意思:

if(myObject != null) {
    //do whatever with myObject
}

对不起,如果有人能比我说得更好,请做。

【问题讨论】:

  • 如果没有别的,这两个语句的含义不同。如果有一个 else,人们会期望编译器足够好来优化最快的比较。
  • 这是一个非常好的问题,我觉得应该有一个明确的答案。我个人认为积极的条件可以更快地阅读和理解,但我希望有一项研究可以明确地证明这一点。

标签: if-statement conditional-statements


【解决方案1】:

我个人更喜欢第一种检查对象是否为空然后立即返回的方法。它允许“真实代码”保持不缩进、线性,并且可以防止许多嵌套的 if 语句,我发现这些语句更具可读性。 否则,这两种方式都是有效的,并且会产生相同的结果。选择最适合您的情况的方法(取决于任何 else 或 else if 语句)。

这是一个很好的例子:

if (object1 == null) {
    return;
}
// do some stuff
if (object2 == null) {
    return;
}
// do some stuff
if (object3 == null) {
    return;
}

反对:

if (object1 != null) {
    // do some stuff
    if (object2 != null) {
        // do some stuff
        if (object3 != null) {
            // do some stuff
        }
    }
}

我发现第一个更具可读性。

【讨论】:

  • 可读性比编译速度重要吗?只是问问而已?我对这些也很陌生
  • 在这种情况下,速度提升(如果有的话)可以忽略不计。在我看来,可读性更重要。此外,先编写代码,测试它,然后再优化。没有必要优化已经足够快的东西,只会降低代码的可读性。
【解决方案2】:

如果存在可以在满足肯定条件时采取的有效操作,例如记录结果集为空或未分配变量,则最好使用肯定条件。当您测试字符串时,API 可以在这里提供帮助,例如 Apache Commons StringUtils isNotBlank()。但是,有时最干净的方法是进行否定测试,例如只允许在变量为非空的情况下进行处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2016-02-03
    • 2016-06-05
    • 2015-09-28
    • 2018-04-22
    • 2017-06-08
    相关资源
    最近更新 更多