这一直困扰着我一段时间,我不确定是否有正确答案:
采取这两个陈述
if(foo == bar)
do this;
else if(foo != bar)
do that;
或
if(foo != bar)
do that;
else if(foo == bar)
do this;
其中一个是正确的(暂时忘记优化) 我的想法告诉我,答案取决于预期的结果,例如,如果这是在一个循环中运行,并且我预测foo将等于bar的次数比不是,那么第一个就是正确的。
符号之间是否存在效率问题?
答案 0 :(得分:5)
但这些符号之间是否存在任何效率问题?否。完全没有。喜欢最具可读性的。如果在一个句子中更好地说“如果不是a
”,请使用!
。否则,不要。
答案 1 :(得分:2)
如果您不想使用If ... else条件,则可以使用三元运算符。
像 result = testStatement? value1:value2;
但是对于嵌套条件,三元运算符看起来非常复杂。
答案 2 :(得分:1)
它确实有很大的不同,优化明智。这取决于你的风格和喜好。你的两个例子都有同样的影响。
答案 3 :(得分:1)
为什么不这样做呢
if(foo == bar)
do this;
else
do that;
看起来更清楚,如果你在条件块中返回任何语句,它会使程序更具可读性
答案 4 :(得分:1)
如果我理解正确,您会询问以下两个片段之间的区别。
if (predicate1()) {
doThis();
} else if (predicate2()) {
doThat();
}
if (predicate2()) {
doThat();
} else if (predicate1()) {
doThis();
}
如果谓词1和谓词2可能同时为真,那么结果会有所不同,我相信你已经意识到这一点。所以我会假设其中最多只有一个是真的。我还假设我们可以安全地忽略评估条件的任何副作用。
是否存在可读性差异?不像代码那样。但是,在具体情况下,普通读者可能会发现首先评估一个谓词更为自然。如果是这样,请继续。
你问效率。第一个答案是,你不应该。但无论如何,有两个指导方针,我认为你已经触及了两个指南:
如果我们有数字,我们可以制作一个很好的数学计算每个片段的平均成本并选择最佳。
至于==
或!=
是否更便宜,我的态度显然不知道答案。我希望它会随着您比较的类型而变化,无论您是运行字节代码还是本机代码,还是您的CPU类型和其他因素。你可以去衡量,周围的人可能会知道一两个规则。无论如何,差异必须非常微小。