條件語句差分
回答
這裏的區別是生成的代碼。這兩者不會生成完全相同的代碼,但實際上這兩個陳述的結果或表現沒有關係。
但是,如果您創建自己的類型,並重寫不等式運算符,並做一個糟糕的工作,那麼它會很重要。
考慮一下:
public class TestClass
{
...
public static bool operator !=(TestClass left, TestClass right)
{
return !left.Equals(right);
}
}
在這種情況下,如果第一個參數的經營者爲空,即。 if (null != obj)
,那麼它會崩潰與NullReferenceException
。
因此,要總結:產生
- 的代碼是不同的
- 性能和最終結果應該是相同的
- 除非你已在所涉及的類型斷碼
現在,我想你問的原因是,你見過代碼C,W通常有這樣的代碼:
if (null == obj)
請注意,我切換到相等檢查在這裏。原因在於用舊的C編譯器編寫的程序中的一個頻繁的錯誤(現在他們傾向於解決這個問題)將會切換它並忘記其中一個相同的字符,即。此:
if (obj = null)
此分配null
到變量,而不是比較它的。解決這個問題的最好方法就是切換它,因爲你不能指定任何東西到null
,它不是一個變量。即。這將無法編譯:
if (null = obj)
不,沒有。完全一樣。
風格null == obj
有時只是用來防止常見錯字obj = null
不意外null分配給一個變量,但!=
但絕對沒有理由這樣做。
在.NET中,它不會實際編譯輸入錯誤obj = null
。
所以編譯器可以防止你意外地做到這一點。
Yoda condition最初來自其他語言,缺少此編譯器功能。
如果你不小心使用`=`來替代`==`,編譯器會發出警告。 – LukeH 2011-02-10 13:45:11
是的,我只是想補充說.NET。 – 2011-02-10 13:45:53
不,但第二種方式更普遍,更可讀(在我看來更符合邏輯)
第一種是Yoda條件。使用它你不應該。
它們完全一樣。
有些人喜歡把null作爲表達的第一部分,以避免類似
if (obj = null) // should be obj == null
但是,當然,這並不適用於!=
操作,所以在你的榜樣,它只是一個錯誤風格的差異。
使用第一種形式
if (blah == obj)
從天莖時,編譯器不會趕上if (obj = blah)
即無意轉讓,除非編譯警告級別設置爲最大
聲明的第一類從C/C++,在那裏有可能通過不布爾值狀況檢查來了。例如。任何不是0就是如此,零是假的:
if (5) { } // true
if (0) { } // false
有時它造成的問題,如果你忘了輸入一個「=」字符:
if (x = 5) { } // this was true always and changed x value
if (x == 5) { } // this was true, if x was equal to 5
因此,使用尤達語法,收到編譯器在情況下,一個 '=' 錯誤被錯過:
if (5 = x) { } // this was generating compiler error for absent-minded programmers
if (5 == x) { } // this was true, if x was equal to 5
C#允許在條件只有布爾值,所以
if (x = 5) { } // this won't compile
if (x == 5) { } // this is true, if x was equal to 5
什麼布爾類型?
if (y = true) { }
if (y == true) { }
嗯,這是無用的代碼,因爲你可以寫if(y)。 結論:Yoda語法隨C/C++一起消失了,您不必再使用它了。
- 1. 分配的條件語句
- 2. 分配的條件語句
- 3. 差分構造SQL語句
- 4. 條件語句
- 5. 條件語句
- 6. 條件語句
- 7. 條件語句
- 8. 對條件語句塊進行分組
- 9. 條件語句的屏幕分辨率?
- 10. mysql條件語句?
- 11. (Java)條件語句
- 12. r條件語句
- 13. XSL條件語句
- 14. SQL條件語句?
- 15. 條件語句JavaScript
- 16. IF語句條件
- 17. Z3條件語句
- 18. C#條件語句
- 19. 多條件語句
- 20. JSRender條件語句
- 21. C#條件語句
- 22. 條件INFILE語句
- 23. .htaccess條件語句
- 24. SQL條件語句
- 25. F#條件語句
- 26. Handlebars.js條件語句
- 27. SQL語句條件
- 28. Bash條件語句
- 29. 條件XPath語句
- 30. SQL條件語句
它們可以是不同的,如果一個白癡推翻!=運算符。 – CodesInChaos 2011-02-10 13:43:26