2013-06-13 73 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 

所以我覺得用總是取決於可讀性,就像上面所說的程序必須將寫入供人閱讀,只偶然的機器來執行。

相關問題