當我讀了一些源代碼,if語句以這種方式編碼,
if (1 == a) {
...
}
而不是
if (a == 1){
...
}
我讀了一本關於這種方式的優點的編程書,但不記得它到底是什麼。任何人都知道這件事?
(很抱歉,如果這個問題擾亂你:-))
當我讀了一些源代碼,if語句以這種方式編碼,
if (1 == a) {
...
}
而不是
if (a == 1){
...
}
我讀了一本關於這種方式的優點的編程書,但不記得它到底是什麼。任何人都知道這件事?
(很抱歉,如果這個問題擾亂你:-))
的優點是編譯器會告訴你錯誤的時候了。例如,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
,因爲這對我來說似乎更易讀。
如果您遺漏了=
,1 = a
是編譯器錯誤,而a = 1
是一個微妙的錯誤。
在傳統的C,其中一個條件是一個整數表達式,它很容易誤寫
if (a = 1)
。問題是,如果你這樣做,編譯器不會抱怨,因爲賦值也是一個整數。向後寫入表達式使得如果你犯這個錯字,代碼將不能編譯。在C中這樣做不是一個壞主意;它在其他語言中的意義更少。
http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined/2430307#2430307 – 2011-12-21 03:53:12
可能重複的[條件檢查?](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
@bubuzzz - 其實在java的情況下,「Yoda條件」是不相關的,因爲javac將產生一個錯誤,無論1 = a'與'a = 1'如果聲明。對於C/C++,我知道它是相關的。 – CoolBeans 2011-12-21 04:03:46