2013-10-21 33 views
3

哪一個會是首選的方法?假設myInteger的99.99%的時間將有一個有效的值,並且這種方法會非常迅速地被調用。首選如果評估

-(BOOL)validDate 
{ 
    NSUInteger myInteger = ...//method to obtain value;  
    if (myInteger != NSNotFound) 
     return YES;   
    return NO; 
} 


-(BOOL)validDate 
{ 
    NSUInteger myInteger = ...//method to obtain value;  
    if (myInteger == NSNotFound) 
     return NO;   
    return YES; 
} 
+1

如果您投票結束此問題,請解釋一下嗎? – user523234

+0

人們投票結束,因爲他們認爲任何答案都是基於意見的。這是無稽之談,因爲正確的答案是它並不重要。不同的是一個機器指令。而且,Wain的答案是我的首選。 – JeremyP

+1

這種性質的問題可能會更適合http://codereview.stackexchange.com/ –

回答

6

的首選將是:

- (BOOL)validDate 
{ 
    NSUInteger myInteger = ...//method to obtain value;  

    return (myInteger != NSNotFound); 
} 

,因爲它實際上並不需要執行一個分支。

需要注意的是,除非你正在運行這段代碼有很多差別會不知不覺小...

+0

請參閱我的編輯。謝謝。 – user523234

+2

「請注意,除非您正在運行此代碼,否則這種差異將不可感知地很小......」如果您嚴格地在談論代碼執行時。但是,如果考慮到代碼可讀性,這絕對是首選方法。 –

+1

@ user523234,即使快速調用,由於在現代處理器中處理分支語句的方式,差異將非常小。除非有理由,否則不要擔心表演。擔心準確性和可讀性。 – Wain

0

如果選擇是嚴格的,你給我一起去的兩個選項之間

-(BOOL)validDate 
{ 
    NSUInteger myInteger = ...//method to obtain value;  
    if (myInteger == NSNotFound) 
     return NO;   
    return YES; 
} 

爲了可讀性。我不喜歡讀雙重否定像!= NSNotFound

1

就標準而言,兩種形式都不是首選。無論myInteger的值如何,都會進行比較,所以兩種表格在性能方面都是相同的。我只會改變方法本身的命名。命名方法和變量時遵守Apple的Cocoa編碼指南將是有利的。每蘋果的指導方針:

如果屬性使用形容詞表示,格式爲:

- (BOOL)isAdjective; 

- (void)setAdjective:(BOOL)flag; 

在這種情況下,由於validDate是一個形容詞(其描述對象的狀態) ,您應該在方法名稱前加上is,如- (BOOL)isValidDate。見Apple's Coding Guidelines for more information

+1

+1「無論myInteger的值如何,都會發生比較,所以兩種表現在性能方面都是相同的。」其餘的並不是我所期待的。 – user523234