2013-07-12 75 views
3

[我以爲這已經被問過了,但我找不到答案]。我應該如何訂購if語句?

在編寫if聲明時,我應該比較還是? (我特別好奇C/C++Java)。

這有什麼關係,還是隻是風格? (公約似乎是「可變首先,價值第二」)。

考慮下面的代碼:

#include <iostream> 

int main() { 
    int x = 5; 

    if (5 == x) { 
     std::cout << "X == 5, true." << std::endl; 
    } 
    if (x == 5) { 
     std::cout << "5 == X, true." << std::endl; 
    } 

    return 0; 
} 

,其輸出:

X == 5,真實。
5 == X,true。

所以沒有出現是有任何區別。我錯過了些微妙的東西嗎?

+7

第二種尤達條件稱爲:-) – dasblinkenlight

+0

@dasblinkenlight輝煌惱人的聲明,我沒有看到鏈接的問題。一旦你知道它叫什麼,就很容易搜索。 – simont

+1

@dasblinkenlight不錯的評論是 – nachokk

回答

10

這些被稱爲Yoda Conditions據我所知,主要的想法是防止意外分配(即你不能分配給文字)。

不錯,值得一提的是,像if (a = 5)其中a不是bool沒有在語言如Java允許的(儘管在C/C++ OK),但隨着維基百科的文章指出,仍然可以防範不必要的行爲:

它也可以解決一些類型的不安全的空行爲。

String myString = null; 
if (myString.equals("foobar")) { /* ... */ } 
// This causes a NullPointerException in Java 

隨着尤達條件:

String myString = null; 
if ("foobar".equals(myString)) { /* ... */ } 
// This is false, as expected 
+3

對於'equals'示例+1這是大多數人陷入的基本陷阱:) – exexzian

+0

但是if(foo = true)'將被允許在Java中。 – Jeffrey

+0

@Jeffrey是的,應該澄清bools是個例外。 – Nobilis

2

不,沒有區別。沒關係。做你喜歡的事。個人而言,我會怎麼做:

x == 5

,因爲它讀取更好(或因此我認爲)。 5 == x只是聽起來不對。但是,再次,個人意見。

我想你會發現大多數人會這樣做x == 5因爲你比較x,而不是比較5

1

兩者都可以。 但是,當左側的參數被更接受的時候。 示例:

if (x == 5) 

無論如何。無所謂,做任何你喜歡的事情,並感覺更舒適。

5

把恆定的第一(又名「尤達風格」)防止問題從簡單的拼寫錯誤:

if (x = 5) // if (x == 5) was intended 

...仍然編譯但錯誤的東西(雖然目前大多數編譯器會發出警告的問題) 。

if (5 = x) // if (5 == x) was intended 

......絕對無法編譯任何東西,甚至無法接近正常運行的編譯器。

+0

尤達風格將只受益於C/C++,因爲在Java中''''''''''也不會編譯 – exexzian

+0

是的,在Java中也是如此,想想如果有人想要比較和把'x = 5'編譯並不知道他的錯過,如果放在yoda的方式不會編譯:) – nachokk

+0

@Bingo尤達風格的好處與布爾表達式的Java:'if(foo = true)'編譯。 – Jeffrey

-4

在大多數情況下,你會發現通常的做法是讓變量是第一位的,因爲運營商==意味着分配,在這裏你都分配值所以只有變量先來纔有意義。

你的if語句應該再是這樣的:

if (5 == x) { 
     std::cout << "X == 5, true." << std::endl; 
    } 
+1

operator == is * not * assignment。 – Borgleader

+0

你正在尋找的詞是「平等」,而不是「分配」。 –