Debugging &引用;如果';VS";否则,如果;

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(...

有人告诉我,当使用“elseif”时,使用“if”语句是首选的,因为代码调试比较困难?这句话有一点道理吗?

我在调试“else-if”语句时从来没有遇到过问题。我认为使用“else-if”语句是干净的,它向阅读代码的程序员传达了“else-if”语句组是互斥的。

我认为这不是真的。if,else-if语句相当简单,易于调试。我想这可能取决于调试的人,但根据我的经验,没有任何区别,而且我也没有听到任何人在调试代码时尖叫“该死的,如果!”的声音。

if/if-else语句不会产生坏代码,我会

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";
}