自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Cocoa 編碼指南 為方法命名

移動(dòng)開發(fā) iOS
在面向?qū)ο筌浖?kù)的設(shè)計(jì)過程中,開發(fā)人員經(jīng)常忽視對(duì)類、方法、函數(shù)、常量以及其他編程接元素的命名。本節(jié)討論的是為方法命名,先來看內(nèi)容。

Cocoa 編碼指南 為方法命名是本文要介紹的內(nèi)容,方法可能是編程接口中最常見的元素了,因此對(duì)其命名要特別注意。本部分討論方法命名的相關(guān)方面:

通用規(guī)則

方法命名時(shí),請(qǐng)記住下面這些通用的指導(dǎo)原則:

方法名稱應(yīng)以小寫字符開頭,名稱中的單詞首字符要大寫。另外,請(qǐng)不要在方法名稱中使用前綴。您可以參考“書寫約定”一節(jié),以了解更多信息。

有兩種特定的情況不適用該原則。其一,方法的名稱可以使用某個(gè)眾所周知的縮寫開頭,而該縮寫可以大寫(例如,TIFF 或者PDF)。其二,您可以使用前綴來分組并區(qū)分私有方法(請(qǐng)參考“私有方法”一節(jié))。

如果方法代表一個(gè)對(duì)象執(zhí)行的動(dòng)作,則其名稱應(yīng)該以一個(gè)動(dòng)詞開頭:

  1. (void)invokeWithTarget:(id)target;   
  2.  (void)selectTabViewItem:(NSTabViewItem *)tabViewItem  

請(qǐng)不要使用 “do”或者 “does”作為名稱的一部分,因?yàn)檫@些輔助性的動(dòng)詞 不能為名稱增加更多的含義。同時(shí),請(qǐng)不要在動(dòng)詞之前使用副詞或者形容詞。

如果方法返回接收者的某個(gè)屬性,則以屬性名稱作為方法名。如果方法沒有間接地返回一個(gè)或多個(gè)值,您也無須使用”get“這樣的單詞。

  1. (NSSize)cellSize;正確  
  2. (NSSize)calcCellSize;錯(cuò)誤  
  3. (NSSize)getCellSize; 錯(cuò)誤 

您可以參考 “存取方法”一節(jié),以了解更多的信息。

所有參數(shù)前面都應(yīng)使用關(guān)鍵字。

  1. (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;正確  
  2. (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;錯(cuò)誤 

參數(shù)前面的單詞應(yīng)能夠?qū)?shù)進(jìn)行描述。

  1. (id)viewWithTag:(int)aTag;正確  
  2. (id)taggedView:(int)aTag;錯(cuò)誤 

如果您當(dāng)前創(chuàng)建的方法比起它所繼承的方法更有針對(duì)性,則您應(yīng)該在已有的方法名稱后面添加關(guān)鍵字,并將其作為新方法的名稱。

  1. (id)initWithFrame:(NSRect)frameRect; NSView  
  2. (id)initWithFrame:(NSRect)frameRect mode:(int)aMode cellClass:(Class)factoryId numberOfRows:(int)rowsHigh numberOfColumns:
  3. (int)colsWide;NSMatrix是NSView的子類。 

請(qǐng)不要使用”and“來連接兩個(gè)表示接受者屬性的關(guān)鍵字。

  1. (int)runModalForDirectory:(NSString *)path file:(NSString *) name types:(NSArray *)fileTypes;正確  
  2. (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;錯(cuò)誤 

雖然上面的例子使用”and“這個(gè)詞感覺還不錯(cuò),但是隨著創(chuàng)建的方法所帶有的關(guān)鍵字越來越多,這種方式會(huì)引起問題。

如果方法描述了兩個(gè)獨(dú)立的動(dòng)作,請(qǐng)使用”and“把它們連接起來。

  1. (void)setNoun:(type)aNoun;  
  2. (type)noun; 

存取方法

存取方法用于設(shè)置或返回對(duì)象的屬性(也就是對(duì)象的實(shí)例變量)。由于屬性的表示方法不同,我們提倡的存取方法的格式也有差異:

如果某個(gè)屬性使用名詞來表示,則方法的格式如下:

  1. (void)setNoun:(type)aNoun;  
  2. (type)noun; 

例如:

  1. (void)setColor:(NSColor *)aColor;   
  2. (NSColor *)color;  

如果某個(gè)屬性使用形容詞表示, 則方法的格式為:

  1. (void)setAdjective:(BOOL)flag;  
  2. BOOL)isAdjective; 

例如:

  1. (void)setEditable:(BOOL)flag;   
  2. BOOL)isEditable;  

如果某個(gè)屬性使用動(dòng)詞表示,則方法的格式為:

  1. (void)setVerbObject:(BOOL)flag;  
  2. (BOOL)verbObject; 

例如:

  1. (void)setShowsAlpha:(BOOL)flag;   
  2. (BOOL)showsAlpha;  

這種情況下,動(dòng)詞應(yīng)使用一般現(xiàn)在時(shí)的格式。

請(qǐng)不要使用分詞形式把動(dòng)詞轉(zhuǎn)換為形容詞:

  1. (void)setAcceptsGlyphInfo:(BOOL)flag;正確  
  2. (BOOL)acceptsGlyphInfo;正確  
  3. (void)setGlyphInfoAccepted:(BOOL)flag;錯(cuò)誤  
  4. (BOOL)glyphInfoAccepted;錯(cuò)誤 

您可以使用情態(tài)動(dòng)詞(在動(dòng)詞前冠以“can”,"should","will"等),使得方法的名稱更加明確,但是請(qǐng)不要使用“do”或“does”這樣的情態(tài)動(dòng)詞。

  1. (void)setCanHide:(BOOL)flag;正確  
  2. (BOOL)canHide;正確  
  3. (void)setShouldCloseDocument:(BOOL)flag;正確  
  4. (BOOL)shouldCloseDocument;正確  
  5. (void)setDoesAcceptGlyphInfo:(BOOL)flag;錯(cuò)誤  
  6. (BOOL)doesAcceptGlyphInfo;錯(cuò)誤 

只有當(dāng)方法間接地返回對(duì)象或者數(shù)值,您才需要在方法名稱中使用get"。這種格式只適用于需要返回多個(gè)數(shù)據(jù)項(xiàng)的方法。

  1. (void)getLineDash:(float *)pattern count:(int *)count phase:(float *)phase;  
  2. NSBezierPath 

如果方法格式和上面一樣,則其實(shí)現(xiàn)應(yīng)該能夠接受NULL 參數(shù),這樣調(diào)用者才能夠表明他們對(duì)其中的一個(gè)或者多個(gè)返回值不感興趣。

委托方法

委托方法是指當(dāng)某些事件發(fā)生時(shí),對(duì)象在委托里調(diào)用的處理方法(如果委托實(shí)現(xiàn)了它們)。委托方法的格式獨(dú)特,但它也適用于在對(duì)象數(shù)據(jù)源里調(diào)用的方法:

方法名稱的開頭應(yīng)標(biāo)識(shí)出發(fā)送消息的對(duì)象所屬的類:

  1. (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(int)row;   
  2. (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;  

在此,類的名稱不需要使用前綴并且首字符要小寫。

除非方法只有一個(gè)參數(shù),并且該參數(shù)表示消息的發(fā)送者,否則類名稱后面都要加上一個(gè)冒號(hào)(參數(shù)是委托對(duì)象的引用)。

  1. (BOOL)applicationOpenUntitledFile:(NSApplication *)sender;  

如果是因?yàn)榘l(fā)送了一則通告而導(dǎo)致某個(gè)方法被調(diào)用,則上述原則不適用。在這種情況下,方法僅有的一個(gè)參數(shù)是通告對(duì)象。

  1. (void)windowDidChangeScreen:(NSNotification *)notification;  

如果調(diào)用某個(gè)方法是為了通知委托某個(gè)事件已經(jīng)發(fā)生或者即將發(fā)生, 則請(qǐng)?jiān)诜椒Q中使用“did”或者“will”這樣的助動(dòng)詞。

  1. (void)browserDidScroll:(NSBrowser *)sender;   
  2. (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window;  

如果調(diào)用某個(gè)方法是為了要求委托代表其他對(duì)象執(zhí)行某件事,當(dāng)然,您也可以在方法名稱中使用“did”或者“will”,但我們傾向于使用“should”。

  1. (BOOL)windowShouldClose:(id)sender;  

集合方法

對(duì)于管理一個(gè)對(duì)象集合的對(duì)象(每個(gè)被管理的對(duì)象稱為集合的一個(gè)元素),習(xí)慣上,我們要求它具有如下格式的方法:

  1. (void)addElement:(elementType)anObj;  
  2. (void)removeElement:(elementType)anObj;  
  3. (NSArray *)elements; 

例如:

  1. (void)addLayoutManager:(NSLayoutManager *)obj;   
  2. (void)removeLayoutManager:(NSLayoutManager *)obj;   
  3. (NSArray *)layoutManagers;  

下述內(nèi)容是該原則的條件和細(xì)化:

如果集合確實(shí)是無序的, 則應(yīng)返回一個(gè)NSSet類型的對(duì)象,而不是返回NSArray對(duì)象。

如果把元素插入到集合的指定位置這一功能很重要,則應(yīng)使用與下面類似的方法來替換或者補(bǔ)充前述的某些方法。

  1. (void)insertLayoutManager:(NSLayoutManager *)obj atIndex:(int)index;   
  2. (void)removeLayoutManagerAtIndex:(int)index;  

使用集合方法時(shí), 您需要記住下面這兩條實(shí)現(xiàn)細(xì)節(jié):

上述方法通常隱含了它們對(duì)于被插入對(duì)象的所有權(quán),因此,用于添加或者插入對(duì)象的代碼必須增加對(duì)象的計(jì)數(shù),而用于移除對(duì)象的代碼也必須要釋放對(duì)象。

如果被插入的對(duì)象需要有一個(gè)指針指向其幕后的主對(duì)象, 則通常情況下, 您應(yīng)該使用 set...這樣方法,它可以設(shè)置對(duì)象的背后對(duì)象指針,但并不增加其引用計(jì)數(shù)。我們以 insertLayoutManager:atIndex:方法為例,NSLayoutManager使用如下方法來實(shí)現(xiàn)這一功能:

  1. (void)setTextStorage:(NSTextStorage *)textStorage;   
  2. (NSTextStorage *)textStorage;  

正常情況下, 您應(yīng)該不會(huì)直接調(diào)用setTextStorage:方法,但可能需要對(duì)其進(jìn)行重寫。

我們還有另外一個(gè)示列用于展示集合方法的上述約定,它來自于NSWindow類:

  1. (void)addChildWindow:(NSWindow *)childWin ordered:(NSWindowOrderingMode)place;   
  2. (void)removeChildWindow:(NSWindow *)childWin;   
  3. (NSArray *)childWindows;   
  4. (NSWindow *)parentWindow;   
  5. (void)setParentWindow:(NSWindow *)window;  

方法的參數(shù)

下面是數(shù)條和方法參數(shù)命名相關(guān)的通用規(guī)則:

和方法名稱一樣, 參數(shù)的名稱也是以小寫的字符開頭,并且后續(xù)單詞的首字符要大寫。例如:removeObject:(id)anObject)。

請(qǐng)不要在參數(shù)名稱中使用"pointer"或者"ptr"。您應(yīng)該使用參數(shù)的類型來聲明參數(shù)是否是一個(gè)指針。

請(qǐng)不要使用一到兩個(gè)字符的名稱作為參數(shù)名。

請(qǐng)不要使用只剩幾個(gè)字符的縮寫。

習(xí)慣上(在Cocoa中),我們把下面的關(guān)鍵字和參數(shù)應(yīng)該組合在一起使用:

  1. ...action:(SEL)aSelector   
  2. ...alignment:(int)mode   
  3. ...atIndex:(int)index   
  4. ...content:(NSRect)aRect   
  5. ...doubleValue:(double)aDouble   
  6. ...floatValue:(float)aFloat   
  7. ...font:(NSFont *)fontObj   
  8. ...frame:(NSRect)frameRect   
  9. ...intValue:(int)anInt   
  10. ...keyEquivalent:(NSString *)charCode   
  11. ...length:(int)numBytes   
  12. ...point:(NSPoint)aPoint   
  13. ...stringValue:(NSString *)aString   
  14. ...tag:(int)anInt   
  15. ...target:(id)anObject   
  16. ...title:(NSString *)aString  

私有方法

大多數(shù)情況下,私有方法遵循和公共方法一樣的命名規(guī)則。但是,有一種常見的約定是為私有方法添加一個(gè)前綴,這樣我們就很容易區(qū)分它們。但即便是利用這樣的約定,私有方法的名稱還是有可能導(dǎo)致奇怪的問題。當(dāng)您為某個(gè)Cocoa框架類設(shè)計(jì)子類時(shí),您無法知道您的某個(gè)私有方法是否在無意中覆蓋了具有相同名稱的私有的框架方法。

大部分Cocoa框架中私有方法的名稱都帶有一個(gè)下劃線前綴(例如,_fooData ),這個(gè)前綴把方法標(biāo)記為私有。根據(jù)這樣的實(shí)際情況,我們給出兩條建議:

請(qǐng)不要在您的私有方法中使用下劃線作為前綴,因?yàn)樘O果公司保留使用這種命名約定。

在為某個(gè)很大的Cocoa框架類(例如NSView)派生子類時(shí),如果需要絕對(duì)保證子類私有方法名稱不會(huì)和超類發(fā)生沖突,則您可以為子類私有方法添加自己的前綴。前綴應(yīng)該盡可能地具有***性,也許您的前綴可以基于公司或者項(xiàng)目名稱,并且使用"XX_"這樣的格式。例如,如果您的項(xiàng)目叫做Byte Flogger,則前綴可以是BF_addObject:這樣的格式。

盡管為私有方法名稱添加前綴似乎和早前我們對(duì)類方法的命名要求相矛盾,但這是因?yàn)榇颂幍哪康暮驮缜安煌何覀冞@么做是為了避免在無意中重寫了超類中的私有方法。

小結(jié):關(guān)于Cocoa 編碼指南 為方法命名的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!推薦幾篇相關(guān)內(nèi)容:

Cocoa 編碼指南 代碼命名基礎(chǔ): http://mobile.51cto.com/iphone-274085.htm
Cocoa 編碼指南 為函數(shù)命名: http://www.scjtxx.cn/php/viewart.php?artID=274108  
Cocoa 編碼指南 為方法命名: http://www.scjtxx.cn/php/viewart.php?artID=274104
Cocoa 編碼指南 為實(shí)例變量和數(shù)據(jù)類型命名:http://www.scjtxx.cn/php/viewart.php?artID=274094
Cocoa 編碼指南 框架開發(fā)者使用技巧和技術(shù)http://www.scjtxx.cn/php/viewart.php?artID=274094

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-07 10:39:07

Cocoa 函數(shù)

2011-07-07 10:07:19

Cocoa 框架

2011-07-07 10:18:58

Cocoa 實(shí)例變量 數(shù)據(jù)

2011-06-17 16:23:49

Cocoa蘋果

2011-07-07 10:50:09

Cocoa 框架

2011-07-07 13:30:32

Cocoa Core

2011-06-15 17:02:02

CocoaiOS

2011-07-07 14:22:27

Cocoa 對(duì)象 生命周期

2011-06-17 15:57:46

CocoaXcode蘋果

2011-07-07 14:10:21

Cocoa 內(nèi)省 hash

2011-07-07 14:46:10

Cocoa Xcode

2011-06-17 15:38:15

Cocoa蘋果

2011-08-11 15:46:55

CocoaCocoa Touch框架

2023-11-22 08:00:56

Go命名規(guī)范

2011-08-10 19:33:09

Cocoa對(duì)象

2011-07-08 10:49:59

Cocoa Touch 靜態(tài)庫(kù)

2011-08-10 18:37:32

CocoaMac OS X

2009-09-01 16:12:41

C#命名指南

2024-01-17 16:29:59

2011-05-11 15:27:58

Windows OOPCocoa MVCCocoa
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)