If statement 条件是否应测试阳性或阴性结果?

If statement 条件是否应测试阳性或阴性结果?,if-statement,conditional-statements,If Statement,Conditional Statements,对不起,如果标题很模糊,我不知道该怎么说 是更好地表述一个条件,使您不想要的结果进入if语句,然后退出函数,还是我应该测试我想要的结果,并在语句后面添加代码 也许一些例子会有所帮助: 我所说的测试阴性结果的意思是: if(myObject == null) { return; } //do whatever with myObject if(myObject != null) { //do whatever with myObject } 我所说的检测阳性结果的意思是: i

对不起,如果标题很模糊,我不知道该怎么说

是更好地表述一个条件,使您不想要的结果进入if语句,然后退出函数,还是我应该测试我想要的结果,并在语句后面添加代码

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

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

if(myObject == null) {
    return;
}

//do whatever with myObject
if(myObject != null) {
    //do whatever with myObject
}
我所说的检测阳性结果的意思是:

if(myObject == null) {
    return;
}

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

对不起,如果有人能比我更好地表达它,请这样做。

我个人更喜欢第一种方法,即检查对象是否为空,然后立即返回。它允许“真正的代码”保持不插入、线性,并且可以防止许多嵌套的if语句,我发现这些语句更具可读性。 否则,两种方法都是有效的,并将产生相同的结果。选择在您的情况下最有效的(这取决于任何其他或其他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
        }
    }
}

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

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

如果没有其他变量,则两个语句的含义不同。如果还有其他问题,人们会期望编译器足够好,能够优化最快的比较。这是一个非常好的问题,我觉得应该有一个明确的答案。我个人认为积极条件的阅读和理解速度更快,但我本以为会有一项研究以这种或那种方式最终证明这一点。可读性比编译器速度重要吗?只是问问?在这种情况下,速度的提高,如果有的话,是可以忽略不计的。在我看来,可读性更重要。另外,先编写代码,测试代码,然后进行优化。优化那些已经足够快并且只会降低代码可读性的东西是毫无意义的。