那是一个可怕的想法。你最终会得到这种形式的代码:
if (something) {
doSomething();
} else {
}
我无法理解任何人怎么可能会认为这比根本不用else
更具可读性和可维护性。这听起来像是由一些手头过于闲余的人制定的规则。尽快让他们被解雇,或者至少静静地离开。
if
语句,考虑是否实际上你不需要一个if-then-else
语句。”我写的每一行代码都是经过深思熟虑的结果:在这种情况下,被拒绝了,因为一个合格的程序员会知道缺少else
子句意味着不应该采取任何行动。我不会阅读一个函数并想象从未放置在其末尾的七行代码,这正是您应该对缺少else
的态度 :-) - paxdiablopublic void DoSomething(string text)
{
if (text == null)
{
throw new ArgumentNullException("text");
}
// Do stuff
}
public int DoSomething()
{
// Do some work
if (conditionBasedOnPreviousWork)
{
log.Info("Condition met; returning discount");
return discount;
}
else
{
log.Info("Condition not met; returning original price");
return originalPrice;
}
}
if-else
是一种语句,并不返回任何值。因此,您可以只写if
部分并继续进行。我认为这是比在每个if
后面添加空的else
更好的做法。if
是一个表达式,必须返回一个值。因此,必须加上一个else
。但是还有一些情况下可能不需要else
部分。对于这种情况,Clojure有一个when
宏,它将if-else
包装起来,在else
部分返回nil
并避免编写它。(when (met? somecondition)
(dosomething))
if-else
表达式的答案,非常棒。 - missingfaktor危险!危险,威尔·罗宾逊!
http://en.wikipedia.org/wiki/Cargo_cult_programming
在代码中包含空的else { }
块会提高代码质量、可读性或健壮性吗?我认为不会。
//negatives should be fixed
if(a < 0) {
a+=m;
}
//else value is positive
从语义角度来看,我无法想到任何一个情况下每个if都没有隐含的else。
如果在我到达墙之前汽车没有停止,我会撞上去,否则我不会撞上去。
撇开语义不谈:
这个问题的答案取决于环境和错误的结果。
商业代码?按照你的编码标准去做。
在我看来,尽管最初似乎需要付出过多的努力,但详细说明它将在10年后重新访问该代码时变得非常有价值。但是,如果你错过了重要的“反条件”,这当然不会是世界末日。
然而:安全、生命关键代码?那就是另外一回事。
在这种情况下,你想要做两件事。
首先:与其测试故障,不如证明没有故障。这需要对进入任何模块持悲观态度。你假设一切都是错误的,直到你证明它是正确的。
其次:在生命关键时刻:你永远不想伤害病人。
bool everyThingIsSafe = true;
if(darnThereIsAProblem())
{
reportToUserEndOfWorld();
}
return everyThingIsSafe;
糟糕,我忘记将everyThingIsSafe设置为false了。
调用此片段的例程现在被欺骗了。如果我将evertThingIsSafe初始化为false - 我总是安全的,但现在我需要else子句来指示没有错误发生。
是的,我可以将其更改为正测试,但然后我需要else来处理故障。
是的,我可以将everyThingIsSafe()分配为检查的立即返回值。然后测试标志以报告问题。一个隐含的else,为什么不明确呢?
严格来说,这个隐含的else是合理的。
对于FDA/安全审计员来说,也许不是。
如果它是显式的,可以指向测试、它的else和我清楚地处理了两种情况。
我已经为医疗设备编码25年了。在这种情况下,您想要else,您想要默认情况,并且它们永远不为空。您想确切地知道会发生什么,或者尽可能接近。因为忽视一个条件可能会导致某人死亡。
查找Therac-25。8人重伤。3人死亡。
不需要为if
语句编写else
部分。
事实上,大多数开发人员更喜欢和建议避免使用else
块。
也就是说
不要写成
if (number >= 18) {
let allow_user = true;
} else {
let allow_user = false;
}
Most of the developers prefer:
let allow_user = false;
if (number >= 18) {
let allow_user = true;
}
def in_num(num):
if num % 3 == 0:
print("fizz")
if num % 5 == 0:
print("buzz")
if (num % 3 !=0) and (num % 5 !=0):
print(num)
在这段代码中,else语句是不必要的。
不需要,但我个人选择始终包含封装大括号以避免错误
if (someCondition)
bar();
notbar(); //won't be run conditionally, though it looks like it might
foo();
我会写
if (someCondition){
bar();
notbar(); //will be run
}
foo();
不,你不必这样做。
而且,我认为这对于可读性来说并不是一个好主意,因为你会有很多空的else块,这看起来并不美观。