这两个例子之间有什么区别:
if(firstchek)
{
if(second)
{
return here();
}
else
{
return here();
}
}
和此:
if(firstcheck)
{
if(second)
{
return here();
}
return here();
// else code without else
}
// code without else
// else code is here
return here();
答案 0 :(得分:12)
此代码:
if (someCondition)
{
foo();
return;
}
bar();
return;
与此相同:
if (someCondition)
{
foo();
}
else
{
bar();
}
return;
唯一的区别在于可读性。有时一种方式更易读,有时另一种方式。请参阅Refactoring: Replace Nested Conditional with Guard Clauses。
嵌套条件:
double getPayAmount() {
double result;
if (_isDead) result = deadAmount();
else {
if (_isSeparated) result = separatedAmount();
else {
if (_isRetired) result = retiredAmount();
else result = normalPayAmount();
};
}
return result;
};
警卫条款:
double getPayAmount() {
if (_isDead) return deadAmount();
if (_isSeparated) return separatedAmount();
if (_isRetired) return retiredAmount();
return normalPayAmount();
};
答案 1 :(得分:2)
假设没有其他代码,代码路径和执行的内容没有区别。
通常,主要区别在于,在指定else
子句时,只有在if
中的表达式求值为false时才会运行。如果您未指定,则代码始终运行。
<强>更新强>:
此:
if(second)
{
return here();
}
else
{
return here();
}
而且:
if(second)
{
return here();
}
return here();
与此相同:
return here();
为什么呢?因为无论second
评估的是什么,你都在做同样的事情,所以检查是多余的。
答案 2 :(得分:1)
这两组代码在语义上是相似的。也就是说他们将在运行时执行相同的操作。但是,您是否应该使用某种形式取决于具体情况。除了所需的语义之外,您的代码还应表达您的意图。
如果代码的意图是做一个或另一个,那么保留其他所以你的意图是明确的。 E.g。
if (withdrawAmmount < accountBalance)
{
return Deduct();
}
else
{
return ArrangeCredit();
}
如果意图是在特殊情况下做第一件事,那么随意省略其他。 E.g。
if (parameter == null)
{
return NothingToDo();
}
return PerformActions();
为了可维护性,你应该考虑删除return语句是否会改变行为和代码,因为有些白痴会这样做(可能是我)。
还应该注意,使用else,代码执行相同而没有返回但没有返回省略else将导致代码行为不同。
答案 3 :(得分:0)
使用第一个代码运行某些内容,无论second是否为定义值。它只取决于它是否是一个定义的值。如果是你运行一点代码。如果不是那么你又跑了另一个。对于第二个示例,如果second是定义的值,则只运行代码。
答案 4 :(得分:0)
在第一种情况下,如果第二个变量为false,则else部分仅执行。 在第二种情况下,总是执行省略else的部分(假设在两种情况下firstcheck都为真)。
答案 5 :(得分:0)
您的代码包含太多的返回语句,我觉得这些语句重复,例如
if(firstchek)
{
if(second)
{
return here();
}
else
{
return here();
}
}
以上等于
if(firstchek)
{
return here();
}
因为here()是相同的函数调用。第二个例子
if(firstcheck)
{
if(second)
{
return here();
}
return here();
// else code without else
}
// code without else
// else code is here
return here();
等于
if(firstcheck)
{
return here();
}
return here();
在第一个示例中,如果示例后面有一些语句,如果条件失败则返回顶级语句,那么后面的语句将被执行示例
if(firstchek)
{
if(second)
{
return here();
}
else
{
return here();
}
}
CallMyCellNo();
如果toplevel if条件失败,将调用CallMyCellNo()。
在第二个示例中,您在toplevel if语句之后返回here(),因此无论if条件的返回值如何,函数执行都将终止。