2011-12-21 54 views
1

可能重複:
Order of condition checking?「如果」 的聲明,恆平等

當我讀了一些源代碼,if語句以這種方式編碼,

if (1 == a) { 
    ... 
} 

而不是

if (a == 1){ 
    ... 
} 

我讀了一本關於這種方式的優點的編程書,但不記得它到底是什麼。任何人都知道這件事?

(很抱歉,如果這個問題擾亂你:-))

+0

http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307 – 2011-12-21 03:53:12

+0

可能重複的[條件檢查?](http://stackoverflow.com/questions/) 776478 /條件檢查順序)和[哪個更有效:if(null == variable)or if(variable == null)?](http://stackoverflow.com/questions/3021195/which-is更有效的if-null-variable-or-if-variable-null)和[many](http://stackoverflow.com/search?q=if+condition+order)[others](http:// stackoverflow.com/search?q=if+yoda) – 2011-12-21 03:55:10

+0

@bubuzzz - 其實在java的情況下,「Yoda條件」是不相關的,因爲javac將產生一個錯誤,無論1 = a'與'a = 1'如果聲明。對於C/C++,我知道它是相關的。 – CoolBeans 2011-12-21 04:03:46

回答

3

的優點是編譯器會告訴你錯誤的時候了。例如,a = 1將編譯,但在運行時會產生錯誤,而1 = a將在編譯時產生錯誤,因爲1不是有效的左值。

實施例:這將產生馬上一個錯誤:

 int a = 0; 
     if(1 = a) { 
     print("test"); 
     } 

鑑於此將編譯(警告可以根據編譯器產生),但它會導致在運行時的問題。

 int a = 0; 
     if(a = 1) { 
      print("test"); 
     } 

這裏的主要思想是確保你是在一個條件使用==代替=

這就是說每個現代編譯器(即Eclipse)都會將上述視爲錯誤。所以它不像過去記事本和vi時代那樣重要(在我看來)。我個人更喜歡a == 1,因爲這對我來說似乎更易讀。

+0

@John - 不是這樣,除非1被定義爲一個變量。閱讀我的帖子。 – CoolBeans 2011-12-21 03:51:31

+0

a = 1會給你一個很大的警告至少:) – 2011-12-21 03:52:40

+0

@Vlad - 是的,這取決於編譯器......老gcc編譯器甚至沒有在那個時候提醒過。有很多胖胖的指法在vi中被擊敗:P – CoolBeans 2011-12-21 03:53:28

0

如果您遺漏了=,1 = a是編譯器錯誤,而a = 1是一個微妙的錯誤。

1

在傳統的C,其中一個條件是一個整數表達式,它很容易誤寫

if (a = 1) 

。問題是,如果你這樣做,編譯器不會抱怨,因爲賦值也是一個整數。向後寫入表達式使得如果你犯這個錯字,代碼將不能編譯。在C中這樣做不是一個壞主意;它在其他語言中的意義更少。