2012-12-14 26 views

回答

12

這是完全有效的:

if (0 == var) {} 
and 
if (null == someObj) {} 

它著名的叫做yoda condition,以防止意外使用單=代替==

我個人從未使用過它。但有些人喜歡它。這真的是一個品味問題。


但是,它在Java中沒有用。因爲,這樣的意外錯字在編譯時被捕獲。

以下將給出Java中的編譯時錯誤。

if(var = 0) 
{ 
//Some code 
} 

因爲賦值操作在Java中不產生布爾值。 但是,在像C/C++這樣的語言中,上述內容是有效的,如果未啓用警告,編譯器將不會發生錯誤。在C/C++中,以上if條件將始終評估爲false(0)。所以它可能會被忽視,並在運行時產生意想不到的結果。

在海灣合作委員會,並啓用所有警告,它會給出上述C或C++警告:這可能不是在C/C++也作爲一個多大用處,預計編譯

warning: suggest parentheses around assignment used as truth value 

所以帶有所有警告並修復所有警告。正如我之前所說,這是個人選擇,並沒有什麼區別。

所以if (0 == var){}是一個有效的語法,並且與if (var == 0) {}相同,如果您更願意Yoda條件它,去吧!

+1

也是一個很好的方法來防止一些空檢查的情況。謝謝。 – assafmo

0

的第一個樣式是由一些首選,因爲說var = null而不是var == null偶然會,將很難在像C和C++語言搭上了錯誤,但null = var會很容易趕上,因爲它不會編譯。如註釋中所述,這不適用於Java,因爲null = var不是布爾表達式。

+1

它不適用於Java不像C或C++導致事情不能被強制bool的 – jozefg

+0

@jozefg謝謝,我會更新我的答案。 – gsingh2011

+0

謝謝大家,這已經足夠了。我很感激。 –

4

一般來說寫0 == n叫做yoda condition。因爲如果你大聲說出來,你會說if zero equals my var

最好寫n == 0。但它完全一樣。但它被讀得更好。

某些條件的優點不適用於java。

if (value = 42) 

產生編譯錯誤。 value = 42產生一個int這不是在java中if的有效輸入。但在C完全合法。

使用左側的constant進行比較是常見的最佳做法。但只有當使用Object等於方法。

if ("CONSTANT".equals(myString)) 

如果myString爲空或您比較primitives因爲沒有.equals()訪問變量在孤單檢查空是沒有意義的。

if ("CONSTANT" == null) 

雖然只是我的意見,但好處只是易讀性。

0

這種類型的術語被稱爲「尤達表達式」,因爲它們與英語自然語言相比是「向後」的。

我不認爲它支付任務 - 良好的代碼審計工具可以捕獲這些類型的錯誤,並且大多數應該已經被更嚴格的Java編譯器捕獲(使用=代替==是C中常見的錯字! )

但是,當您使用compareTo方法時,您需要考慮null值。

if ("example".equals(input)) 

不能碰上NullPointerException,而更多的 「自然」

if (input.equals("example")) 

就可以了,需要額外檢查的null值。