當檢查對象是否是nil,有人使用1:對象== nil或nil ==對象來檢查對象是否爲零?
if (object == nil) {
//...
}
有人使用2:
if (nil == object) {
//...
}
1和2之間的任何差異?哪一個更好?
當檢查對象是否是nil,有人使用1:對象== nil或nil ==對象來檢查對象是否爲零?
if (object == nil) {
//...
}
有人使用2:
if (nil == object) {
//...
}
1和2之間的任何差異?哪一個更好?
的區別主要是,如果你mistakingly忘記=
e.g這樣
(nil = myObject)
因爲你不能分配一個值爲零,你會得到一個錯誤。所以它是某種安全的。
不,只是在可讀性方面我更喜歡第一個,而其他一些開發人員可能更喜歡另一個。
它只是一個編碼風格問題,它根本沒有技術上的差異。
有些人可能會說第二個更好,因爲它更明確,nil
排在第一位,所以更容易注意到我們正在測試nil
,但它又取決於開發人員的口味。
它不是零,它是NULL。 他們是一樣的。 ==運算符是一個比較運算符。作爲一種趨勢,我們使用(object == NULL)
在Objective-C(因爲這個問題被標記),它是'nil'在這種情況下。 – marramgrass
某些開發人員更喜歡「Yoda conditionals」的原因是不太可能在無意中編寫if (object = nil)
(注意作業)。
這不再是一個問題,因爲編譯器在沒有額外括號的條件表達式中進行賦值時會發出警告。
由於Yoda條件的可讀性較差,因此應避免。
使用nil == object
實際上是一種成語,可以防止在您的表達中錯過=
的不幸事件。例如,你想要寫:
if (object == nil)
但寫:
if (object = nil) {
這是一個典型的錯誤,一個是很難追查,因爲分配也有一個值作爲一個表達式,因此條件將評估爲假(沒有錯誤),但你也將有消滅了你的對象......
在另一方面,寫
if (nil == object)
你保證那種錯誤將由編譯自
if (nil = object)
被檢測是不是正規的分配。
其實,現代的編譯器(默認設置),將提供一種「意外」的分配,即一個警告:
if (object = nil) {
將引發警告;但這仍然是棘手的。
根本沒有區別。這都是關於可讀性的。如果你想寫一個乾淨的代碼,你應該照顧這個。
如果您將「對象」放在評估的右側,它會變得不那麼明顯,你到底在做什麼。
它們是等價的。回到過去,編寫if (CONST == variable)
以減少意外分配的風險很常見。例如。 if (variable = CONST)
會爲該變量分配一個常量,並且if語句將根據常量的值而不是變量評估爲真或假。
如今,IDE和編譯器通常足夠聰明,可以在這些行上發出警告。由於可讀性,許多人更喜歡第一個版本。但真的是一個風格問題。
使用比較運算符==時的最佳做法是將常量放在操作數的左側。以這種方式,不可能意外地錯誤地輸入賦值運算符而不是比較。
例如:
(iVarOne == 1)
在功能上等於
(1 == iVarOne)
但
(iVarOne = 1)
與
0123大不相同(1 = iVarOne)
這個最佳實踐工作迴避的事實,當你輸錯了一個比較運營商分配的編譯器不抱怨...
正如其他人指出的那樣,他們是等價的。也有另一種方式來做到這一點:
if (!object) {
// object is nil
}
有兩個沒有什麼區別.. – Krishanbhag