2013-06-13 75 views
5

我的IDE(IntelliJ IDEA的)告诉我,我不得不删除这个括号的选项,如果声明:应该在Java中避免多个if语句,如“if(condition)if(condition)...”吗?

if (objectIsOfTypeFoo) { 
    if (objectOfTypeFooIsShared) { 
     // do something with Object of type Foo knowing that it's shared... 
    } else { 
     // do something with Object of type Foo knowing that it's not shared... 
    } 
} else if (objectIsOfTypeBar) { 
    ... 
} 

要成为:

if (objectIsOfTypeFoo) if (objectOfTypeFooIsShared) { 
    // do something with Object of type Foo knowing that it's shared... 
} else { 
    // do something with Object of type Foo knowing that it's not shared... 
} else if (objectIsOfTypeBar) { 
    ... 
} 

我明白这是有道理的,并它很容易失去缩进,但我担心可读性可能会受到影响。后者看起来更清洁,但是节省的空间是否值得潜在的混淆?

我认为两者之间的性能差异是微不足道的,如果有的话。

作为一个后续问题:是否有限制多少'if(条件)可以适合一条线,或者说它在什么点变得太多?

+4

第一个示例更具可读性,并且不太可能由于丢失大括号而导致问题 - 恕我直言 – MadProgrammer

+2

运行时的性能差异为零,因为两个版本的代码都是相同的。编译时的性能差异是一些额外花括号的花费。所以没有。哦,并忽略IDE:它提供(在我看来)可怕的建议。 – dlev

+0

我从来没有见过IntelliJ推荐过这样的东西。我会检查你的风格设置。 – duffymo

回答

8

我正在为您已有的方式投票。

我甚至不使用此:

if(foo) 
    return bar; 

我喜欢这个代替:

if(foo){ 
    return bar; 
} 

“计划必须供人阅读写的,只是附带的机器来执行”

+2

+1 - 确实如此,但对于风格和完美的报价。就个人而言,我建议你接受这个。 – duffymo

+1

我不同意,我认为当一个if很容易就像if(foo)抛出异常,并不差。 – nachokk

2

我更喜欢第一个。我认为在单行上有多个if的位是不可读的。

对不起,但我要投票结束。这将是一场没有答案的辩论。

+1

很感谢!关闭它!在这方面似乎已经达成了共识:) – Liam

4

总是使用大括号。有一天,你会希望在你的if或else块中发表第二个陈述,然后你会希望你有。但是,你真的在​​制作instanceof支票吗?你可以重写你的程序来将它们变成多态的对象行为吗?

+1

通常当有人写这样的复杂代码时,进一步的想法可以简化它。即使不容易拥有不同版本的'Foo',也许'Foo'可能拥有一个知道共享策略的对象,或者拥有与共享策略不同的子类。请记住帕斯卡的信:“我很抱歉,我的信很长,我没有时间让它缩短。” –

+0

是的,我需要为这个班进行基因改造,但是暂时我只需要得到我的工作! – Liam

1

它的建议始终使用大括号,但有一种情况时,没有任何机构使用大括号,它是最好不要使用他们的原因是更具可读性

if(condition){ 

} else if (condition) { 
    ... 
}else if (condition3){ 

} 

如果你总是使用大括号它会是这样。可能我在某个地方犯错了。

if(condition){ 

} else{ 

     if (condition) { 
      ... 
     }else { 

      if (condition3){ 

      }//end if 
     }//end else 
}//end else 

所以我觉得用总是取决于可读性,就像上面所说的程序必须将写入供人阅读,只偶然的机器来执行。

相关问题