Debugging &引用;如果';VS";否则,如果;
有人告诉我,当使用“elseif”时,使用“if”语句是首选的,因为代码调试比较困难?这句话有一点道理吗?我在调试“else-if”语句时从来没有遇到过问题。我认为使用“else-if”语句是干净的,它向阅读代码的程序员传达了“else-if”语句组是互斥的。我认为这不是真的。if,else-if语句相当简单,易于调试。我想这可能取决于调试的人,但根据我的经验,没有任何区别,而且我也没有听到任何人在调试代码时尖叫“该死的,如果!”的声音。if/if-else语句不会产生坏代码,我会Debugging &引用;如果';VS";否则,如果;,debugging,language-agnostic,if-statement,Debugging,Language Agnostic,If Statement,有人告诉我,当使用“elseif”时,使用“if”语句是首选的,因为代码调试比较困难?这句话有一点道理吗?我在调试“else-if”语句时从来没有遇到过问题。我认为使用“else-if”语句是干净的,它向阅读代码的程序员传达了“else-if”语句组是互斥的。我认为这不是真的。if,else-if语句相当简单,易于调试。我想这可能取决于调试的人,但根据我的经验,没有任何区别,而且我也没有听到任何人在调试代码时尖叫“该死的,如果!”的声音。if/if-else语句不会产生坏代码,我会 if(...
if(...)
{
}
else if(...)
{
}
完全等同于:
if(...)
{
}
else
if(...)
{
}
if(...) foo();
else bar();
以同样的方式:
if(...)
foo();
else
bar();
完全等同于:
if(...)
{
}
else
if(...)
{
}
if(...) foo();
else bar();
这是100%的风格,一个比另一个可读性好还是不好完全取决于您的编程文化、语言以及语句的复杂程度。if和
else if
之间的区别与协调连词和排他连词之间的区别相同。if“else if”是一种非首选的结构,那么为什么几乎所有现代语言都提供这种结构呢?我认为你可以继续使用其他的如果。。。此外,当它点击汇编时,无论如何都是跳转/转到;) 也许你的老板只是想早点回来
我不经常需要if/else
。但这并不是因为else
是错误的,而是因为我喜欢早期回报,如果你使用早期回报,你不需要那么多其他东西
因此,不是:
boolean validate(DomainObject o) {
boolean valid = false;
if (o.property == x) {
valid = true;
} else if (o.property2 == y) {
valid = true;
} ...
return valid;
}
我喜欢打字:
boolean validate(DomainObject o) {
if (o.property == x)
return true;
if (o.property2 == y)
return true;
return false;
}
我也不同意。没有什么比“如果”更难的了;它是否是正确的编程方法取决于每个应用程序。在某些情况下,“switch”或“case”语句更好,但这取决于应用程序
在我看来,制定这样一个硬性的规则太有限了。这两种形式都需要相同的调试工作。我敢说“elseif”语句实际上使调试更容易 此外,“else-if”语句还可以提高性能,因为您的程序不必检查实际上相互排斥的条件 “elseif更难调试”的说法是荒谬的。我建议你以后不要向那个人求助 使用语义正确的解决方案。如果解决方案是:
if a is true do a.action
if a is not true and b is true, then do b.action
otherwise do c.action
if a is true do a.action
if b is true do b.action
if c is true do c.action
如果合适,则选择else。例如:
if (a == true)
{
// do a.action
}
else if (b == true)
{
// do b.action
}
else
{
// do c.action
}
if (a == true)
{
// do a.action
}
if (b == true) // note that we don't care if a was true
{
// do b.action
}
if (c == true) // care about neither a nor b
{
// do c.action
}
如果解决方案是:
if a is true do a.action
if a is not true and b is true, then do b.action
otherwise do c.action
if a is true do a.action
if b is true do b.action
if c is true do c.action
如果
不合适,则选择。例如:
if (a == true)
{
// do a.action
}
else if (b == true)
{
// do b.action
}
else
{
// do c.action
}
if (a == true)
{
// do a.action
}
if (b == true) // note that we don't care if a was true
{
// do b.action
}
if (c == true) // care about neither a nor b
{
// do c.action
}
在正常使用中,else没有任何问题,如果
有任何问题。事实上,我认为这是一种重要的编码技术。
唯一的一次else if
问题是当你把它们链接在一起时——我不得不调试有数千行的遗留代码,由一页又一页的if、elseif、elseif、elseif。。。。。。无限的。现在那是坏代码。不要那样做
这类事情可能会让你对elseif有不好的体验,但那只是糟糕的编码;如果没有其他条件,您可能会做得同样糟糕或更糟。为什么不尝试用代码中的ifs替换所有其他ifs?它将编译,但它将只执行需要,如果你是幸运的
这是不一样的,为什么会有If和Else If是有原因的
例:
你能做的唯一一件事,也是风格的问题,就是替换
if(money > 5000) {
echo "wow i can buy a lot of other things too!";
} else if(money > 3000) {
echo "wow that is a lot of money but i wish i had 5000!";
}
借
但我认为这不是你所要求的?你在比较
if (a=b) do this;
if (a=c) do this;
if (a=d) do this;
致:
1) 第一个示例更难调试,因为您的代码没有第二个示例提供的自然工作流
2) 正如Jason所指出的,第一个示例的性能不同于第二个示例,因为无论发生什么情况,都将测试所有三个if语句,而第二个示例在它变为真时将停止测试
tl;dr:你的老板是错的,尽管他也可以上网。我喜欢那句老话:“调试是编写代码的两倍难,所以如果你尽可能聪明地编写代码,那么根据定义,你就没有足够的聪明来调试它。”。因此,我试图使我的代码易于阅读和调试(有时这是不可能的)。话虽如此,我不认为else-if很聪明,所以我会继续使用它。它比:
if (a=1) then {
DoThis;
EXIT; // Not sure if this works in your language, but you know what I mean...
}
if (a=2) then {
DoThis;
EXIT;
}
if (a=3) then {
DoThis;
EXIT;
}
无论您以何种方式编写,您都应该记住,语言语法可以用来提高代码的可读性,并向您的同事说明这些代码行背后的想法。
所以选择哪种方式都要明智。误用的一个例子是在其他代码块中吸收许多if
块。这会使代码无法阅读和维护。
也许你的老板这么说是因为他不能 如果语句的形式是:
if (condidtion1)
statement1;
else
statement2;
语句的有效形式之一是“if语句”。让我们把上面的“语句2”变成“if语句”if(condition2)语句3代码>
if (condition1)
statement1;
else if (condition2)
statement3;
空白区域和位置只是为了您的利益(可读性)。编译器对“else if”本身一无所知
这表明“如果”和“如果”不是一回事else if'是复合语句
语句的另一种有效形式是括号{}中的语句块。这就是为什么您经常(通常)在“if语句”中看到括号。是否在单个语句中使用它们只是风格问题
使用“else if”的原因是,您不必处理您知道将计算为false的“condition”表达式。您知道这一点是因为您已经检查了其他条件
也许你的老板是在说你可能会在这些假设中犯错误
if(x>5)
{
color="blue";
}
if(x>10)
{
color="red";
}
if(x>5)
{
color="blue";
}
else if(x>10)
{
color="red";
}