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