2012-06-25 198 views

回答

7

的區別主要是,如果你mistakingly忘記= e.g這樣

(nil = myObject) 

因爲你不能分配一個值爲零,你會得到一個錯誤。所以它是某種安全的。

1

不,只是在可讀性方面我更喜歡第一個,而其他一些開發人員可能更喜歡另一個。

它只是一個編碼風格問題,它根本沒有技術上的差異。

有些人可能會說第二個更好,因爲它更明確,nil排在第一位,所以更容易注意到我們正在測試nil,但它又取決於開發人員的口味。

-3

它不是零,它是NULL。 他們是一樣的。 ==運算符是一個比較運算符。作爲一種趨勢,我們使用(object == NULL)

+3

在Objective-C(因爲這個問題被標記),它是'nil'在這種情況下。 – marramgrass

3

某些開發人員更喜歡「Yoda conditionals」的原因是不太可能在無意中編寫if (object = nil)(注意作業)。

這不再是一個問題,因爲編譯器在沒有額外括號的條件表達式中進行賦值時會發出警告。

由於Yoda條件的可讀性較差,因此應避免。

4

使用nil == object實際上是一種成語,可以防止在您的表達中錯過=的不幸事件。例如,你想要寫:

if (object == nil) 

但寫:

if (object = nil) { 

這是一個典型的錯誤,一個是很難追查,因爲分配也有一個值作爲一個表達式,因此條件將評估爲假(沒有錯誤),但你也將有消滅了你的對象......

在另一方面,寫

if (nil == object) 

你保證那種錯誤將由編譯自

if (nil = object) 

被檢測是不是正規的分配。

其實,現代的編譯器(默認設置),將提供一種「意外」的分配,即一個警告:

if (object = nil) { 

將引發警告;但這仍然是棘手的。

0

根本沒有區別。這都是關於可讀性的。如果你想寫一個乾淨的代碼,你應該照顧這個。

如果您將「對象」放在評估的右側,它會變得不那麼明顯,你到底在做什麼。

2

它們是等價的。回到過去,編寫if (CONST == variable)以減少意外分配的風險很常見。例如。 if (variable = CONST)會爲該變量分配一個常量,並且if語句將根據常量的值而不是變量評估爲真或假。

如今,IDE和編譯器通常足夠聰明,可以在這些行上發出警告。由於可讀性,許多人更喜歡第一個版本。但真的是一個風格問題。

1

使用比較運算符==時的最佳做法是將常量放在操作數的左側。以這種方式,不可能意外地錯誤地輸入賦值運算符而不是比較。

例如:

(iVarOne == 1)

在功能上等於

(1 == iVarOne)

(iVarOne = 1)

0123大不相同

(1 = iVarOne)

這個最佳實踐工作迴避的事實,當你輸錯了一個比較運營商分配的編譯器不抱怨...

4

正如其他人指出的那樣,他們是等價的。也有另一種方式來做到這一點:

if (!object) { 
    // object is nil 
}