这听起来像是一个愚蠢的问题,我犹豫要发布它,但仍然: 如果某些东西只需要在某种条件下运行,哪一种更有效:
:一种。
if (condition) {
// do
// things...
}
乙
if (!condition) { return; }
// do
// things...
答案 0 :(得分:24)
它们同样有效,但 B 通常被认为具有更好的可读性,尤其是在用于消除多种嵌套条件时。
答案 1 :(得分:12)
请选择最具可读性的东西。此级别的性能优化几乎不是问题。即使是真正对性能敏感的框架部分(例如.NET框架)也无法从这种微优化中受益。
答案 2 :(得分:7)
真正的问题是,你真的在乎吗?
我说不!拥有更好的可读代码比做一些微优化更重要。
答案 3 :(得分:7)
这是一种风格的东西。表现不相关;两者都产生几乎相同的机器码。
关于风格的几点考虑:
如果您想避免横向编程',您可能希望更喜欢B来避免嵌套条件。例如,如果要在不影响方法流程的情况下添加异常:
<强> A 强>:
public String getDescription(MyObject obj) {
if (obj == null) {
return "";
} else {
if (!obj.isValid()) {
return "invalid";
} else {
...
}
}
}
<强>乙强>:
public String getDescription(MyObject obj) {
if (obj == null) {
return "";
}
if (!obj.isValid()) {
return "invalid";
}
....
}
但如果你问我,差异很小。绝对不值得进行代码风格的战争&#39;。
答案 4 :(得分:3)
虽然我同意你应该首先选择可读性,但我会继续添加一些信息:在C#中,没有区别。它编译成相同的东西(通过构建发布模式进行优化)。其他语言?谁知道,我相信他们中的一些人认为它有所不同,但实际上你需要关注它的可能性很小。
答案 5 :(得分:0)
在两种情况下,性能大致相同。因此,它更多地成为样式或偏好问题。
我个人更喜欢编写if->返回(即情况B),因为如果代码包含复杂的嵌套条件,它会使代码看起来更简洁且易于阅读。