2011-08-08 22 views
1

可能重複:
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?聲明「==」條件的標準指南是什麼?

請參閱下面的代碼: -

if(myVariable==5) 
    { 
    //some logic 
    } 

我的一個朋友說,這是不寫代碼的好辦法因爲它不是每個指導方針,但他沒有任何理由。上述代碼是否有例外或偶然修改的機會?據他說,更好的辦法將是

if(5==myVariable) 
     { 
     //some logic 
     } 

請讓我知道哪一個更好的方式,爲什麼?如果您有任何鏈接,請提供鏈接。

+0

無論哪種方式都是有效的,但我已經看到前者使用99%的時間。 – ssell

+1

基本上,這篇文章中的所有答案都是說一件事:兩個陳述都是一樣的,只是堅持一個更具可讀性的陳述。最常見和最常用的是if(變量== 5),它也恰好更具可讀性(你可以看到你在考慮什麼,以及你在檢查什麼)。順便說一句,兩種方式都是正確的。 –

+2

他們被稱爲[尤達條件](http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307),被認爲是愚蠢的。 –

回答

10

的唯一原因寫:

5 == variable 

代替

variable == 5 

的是,在前一種情況下,如果你錯誤地把一個分配(單=)的地方,你會得到一個編譯時錯誤,因爲你正試圖覆蓋一個常量。

但任何像樣的編譯器會給你一個警告,如果你這樣做:

if (variable = 5) 

所以恕我直言,這是不值得擔心。我總是使用後者if (var == num)的形式。


然而,在Java中一個常見的模式是值得使用。當測試平等的字符串,應該使用:的

if ("constant".equals(variable)) { ... } 

代替:

if (variable.equals("constant")) { ... } 

因爲後者可以觸發一個空指針異常,前者不能。

+3

+1表示「任何體面的編譯器都會給你一個警告」, – Nawaz

+0

+1,因爲「任何體面的編譯器都會給你一個警告」。 –

1

對於==,也無所謂了一下你做什麼爲了它

你的朋友提到「指導方針」 - 也許這是一個業務規則?儘管是任意的和半無意義的...

2

兩者都是相同的。選擇哪一個你找到更多的可讀性..我會第一個去

1

這是不重要的。我更喜歡第一個,因爲它更具可讀性。

我希望你知道使用==並不總是正確的參考類型。在這些情況下,您應該更喜歡equals。那麼它很重要,因爲你想避免空指針異常。在這種情況下,最好解除引用不能爲空的實例的引用。

4

逆轉是在像C,其中

if (x = 5) { 
    ... 
} 

意外分配x到值5,如果你錯誤地輸入=代替==某些語言優選的。通過顛倒兩個參數,編譯器會理所當然地反對你重新分配值5

與C/C++,對於Java等語言它不是這樣的一個問題,因爲

if (x = 5) { 
    ... 
} 

不是一個有效的聲明。不過我仍然按照上面的做法。在Java和C/C++之間交換時,我不必重新思考。

+0

這對於布爾表達式在Java中不是一個問題。如果我正確地遵循Java Spec,那麼就像'boolean b = ...;如果(b = true)'是有效的代碼(對於C#,btw是一樣的)。 –

2

對於這種特定情況,在技術上它是更安全5 == variable因爲如果你不小心說5 = variable編譯器會報錯。另一方面,variable = 5是完全合法的。

+0

當我打算寫'5!= variable'時,它不會阻止我編寫'5 ==變量'。 –

+0

這就是爲什麼我說*技術*因爲這是一個你不得不面對的用例。你的論點對於'變量!= 5'井是真實的。無論如何,在我看來,擔心這種東西似乎有點偏執。 – Jeremy

2

此慣例是爲了防止您在意指if (myVariable==5)時無意中編寫if (myVariable=5)

0

我找不到這樣的guildline。 應該遵循第一種方法,因爲它更具可讀性。

0

我想如果你知道他們是否相等,那很好。 但如果你想知道關於字符串,那麼我更適合使用'.equals'。

e.g:

object.equals("something"); 
+0

或者最好是''something「.equals(object)',因爲這是最好在'.equals()'右邊放一個常量的情況之一。 – Alnitak

0

我能想到的唯一的事情是避免那種constant = expression可能的語法錯誤,或避免在C++錯位運算符重載。在Java中,兩個表達式都是合法有效的,並且選擇一個是一個選擇問題。