你有没有特别的理由不使用嵌套的if语句?

时间:2014-03-09 22:01:55

标签: c# java php c++ vb.net

使用嵌套的if语句和使用一个有很多参数的long if语句有区别吗?

e.g。

if ( var1 == var2 && var3 == var4 )
{
  //do something
}

if ( var1 == var2 )
{
  if ( var3 == var4 )
  {
    //do something
  }
}

我想知道这样做是否有任何不同?

感谢

5 个答案:

答案 0 :(得分:2)

通常,编译器将为这两个变体生成相同或几乎相同的代码。对于支持短路的解释语言(不评估||的第二部分或&&<结果何时确定),它也几乎是一样的。

我的建议是使用代表你想要做的最清楚的表格。

例如,如果我们想检查两个坐标是否匹配:

if (x1 == x2 && y1 == y2) 

如果您的代码是这样的话,请填写:

if (country_of_origin == "Sweden")
{
    if (today == thursday)
    {
       ... 
    }
}

可能更有意义......

答案 1 :(得分:2)

第二种样式允许检查是否需要独立于第一个if条件。

例如,如果您需要在额外条件下执行某些操作,其中(var3!= var4)BUT(var1 == var2)仍然存在,则无法执行此操作:

“if(var1 == var2&& var3 == var4)”

因此,您需要以下内容:

if(var1 == var2){
    if(var3 == var4){

    }

    //more code...
    //... var3 & var 4 change...
    //

    if(var3 != var4){

    }
}

正如评论者@Solace所说,它只是允许更多的灵活性。

答案 2 :(得分:1)

他们都做同样的事情,但我个人认为嵌套是整洁的,它也允许代码在嵌套if的任何一侧执行,这通常是必需的

if ( var1 == var2 )
{
     //do something here based on the first if but before second if

  if ( var3 == var4 )
  {
    //do something 
  }
    //do something here also which may be different based on the nested if result
}


但是如果你不需要这个,那么你的第一个代码可能只需要一个if

就可以快一点

答案 3 :(得分:1)

不同的情况需要不同的解决方案:

if ( width == height && width == depth )
{
  // Its a cube!
}

if ( x == y )
{
  if ( p == q )
  {
    //do something for when x == y but p == q
  } else {
    //do something for when x == y but p != q
}

你无法概括应该或不应该使用哪些结构 - 它们在某些情况下都是合适的。

答案 4 :(得分:0)

嗯,这取决于你的病情。如果它与你的相同,那么绝对不需要选择第二种方式。

这是关于编写干净且可读的代码 - 像if (condition1 && condition2)那样执行此操作,您建议以下两个条件对于以下代码片段是绝对必要的。