我发现自己经常使用这样的模式:
if (a > b) {
foo();
}
elseif (c > d) {
bar();
}
else {
baz();
}这里的要点是,除非您仔细遵循程序逻辑,否则第二个条件与第一个条件没有明显的联系。这是一件非常糟糕的事情吗?上面的表述是不是更可取
if (a > b) {
foo();
}
else {
if (c > d) {
bar();
}
else {
baz();
}
}出于可维护性的原因?有没有一种更好的模式是我完全忽略的?“没有明显的连接”似乎是我的代码中最常见的bug来源之一。
发布于 2011-04-02 04:06:04
我认为第一个绝对是更可取的。我使用第二种方法的唯一一次是将代码放在外部,而不是内部的if/else中。
当我看到else if时,我立即查找if。所以我会说这显然是有联系的。
发布于 2011-07-12 12:55:50
我想这是代码的味道。你在这里做什么,或者你为什么要这么做,并不是很明显。事实是,您认为它们之间没有明显的联系,并且它们是bug的常见来源,这告诉您不要这样做。
重写这段代码,以便您在这些条件上进行分支的原因变得清晰。理想情况下,你应该能够阅读代码并让它表达你的意图和/或你的规范。
taller_than_wide = a > b;
more_expensive_than_normal = c > d;
if (taller_than_wide) {
foo();
}
elseif (more_expensive_than_normal) {
bar();
}
else {
baz();
}发布于 2011-04-02 04:16:14
我避免使用第二种方法,因为它会导致大型条件句的大量缩进。
https://stackoverflow.com/questions/5518256
复制相似问题