IF / ELSE声明顺序的最佳实践(当永远不允许一个案例时)

时间:2010-06-22 06:56:11

标签: performance if-statement

在一个简单的if-else案例中(每个条目需要检查一个分数的分母的值为零),是否存在正确的语句排列?

例如:

    if (!(denominator == 0))
    {
        quotient = numerator / denominator;
        System.out.println(numerator + " / " + denominator + " = " + quotient);
    }
    else
    {
        System.out.println("Division by zero is not allowed.");
    }

    if (denominator == 0)
    {
        System.out.println("Division by zero is not allowed.");
    }
    else
    {
        quotient = numerator / denominator;
        System.out.println(numerator + " / " + denominator + " = " + quotient);
    }

我知道这是一个微不足道的例子,但我很好奇是否考虑到if-else语句的排序有任何好处(如上所述)。对于输入/值的不那么微不足道的测试,我可以理解这里提出的共识答案:Best Practice on IF/ELSE Statement Order

如果这是一个糟糕的问题(或者应该有明显答案的问题),请提前道歉。我的目的是提高编码的一般效率。虽然,我怀疑我给出的两个例子之间有任何显着差异。我的新手分析表明,分母将以任何一种方式进行零测试,因此否定了测试“正常情况”的任何好处。如果我错了,请纠正/启发我。

TIA

3 个答案:

答案 0 :(得分:3)

这里的另一个答案提到Code Complete(一本好书)作为首先拥有最正常案例的一个例子。我完全同意这一点。但是,由于你的行为不是“if(normal)doSomething(极少数情况下)doSomethingRarer”我不认为这适用。麦康奈尔提前退出的建议似乎是恰当的:

/* Probably should be throw new Exception(".."); */
if (denominator == 0) 
    return "Division by zero is not allowed."; 


quotient = numerator / denominator; 
return(numerator + " / " + denominator + " = " + quotient);

答案 1 :(得分:2)

Steve McConnell在Code Complete中有一些建议。他建议首先出现if语句的非异常或最常用的分支。 (您的第一个代码示例。)

关于表现,应该没有区别。

答案 2 :(得分:0)

最后,编译器的工作就是为了获得最佳性能而订购此类东西。当涉及到这个微不足道的细节时,您的主要关注几乎应该始终是简单易读的代码。因此,第二个例子将得到我的投票,因为它(略微)少于它。