我工作的具有風格的Java源代碼:它是否適合該聲明。如果(0!=表達式或變量){}在Java中?
if (0 == var) {}
and
if (null == someObj) {}
或
if (0 != var) {}
and
if (null != someObj) {}
我是否應該改寫爲:
if (var == 0) {}
and
if (someObj == null) {}
?
在此先感謝!
我工作的具有風格的Java源代碼:它是否適合該聲明。如果(0!=表達式或變量){}在Java中?
if (0 == var) {}
and
if (null == someObj) {}
或
if (0 != var) {}
and
if (null != someObj) {}
我是否應該改寫爲:
if (var == 0) {}
and
if (someObj == null) {}
?
在此先感謝!
這是完全有效的:
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條件它,去吧!
也是一個很好的方法來防止一些空檢查的情況。謝謝。 – assafmo
的第一個樣式是由一些首選,因爲說var = null
而不是var == null
偶然會,將很難在像C和C++語言搭上了錯誤,但null = var
會很容易趕上,因爲它不會編譯。如註釋中所述,這不適用於Java,因爲null = var
不是布爾表達式。
它不適用於Java不像C或C++導致事情不能被強制bool的 – jozefg
@jozefg謝謝,我會更新我的答案。 – gsingh2011
謝謝大家,這已經足夠了。我很感激。 –
一般來說寫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)
雖然只是我的意見,但好處只是易讀性。
這種類型的術語被稱爲「尤達表達式」,因爲它們與英語自然語言相比是「向後」的。
我不認爲它支付任務 - 良好的代碼審計工具可以捕獲這些類型的錯誤,並且大多數應該已經被更嚴格的Java編譯器捕獲(使用=
代替==
是C中常見的錯字! )
但是,當您使用compareTo
方法時,您需要考慮null
值。
if ("example".equals(input))
不能碰上NullPointerException
,而更多的 「自然」
if (input.equals("example"))
就可以了,需要額外檢查的null
值。
您已經遇到用Java編寫的C代碼。將其改爲任何你喜歡的。 – EJP
如果藍色是天空...... –