Cocoa 編碼指南 代碼命名基礎
本節主題包括Cocoa命名約定以及我們提倡的框架編程實踐。使用公共API開發Cocoa框架、插件及其他可執行文件需要使用的方法和約定不同于應用程序開發。如果產品主要客戶是開發人員,則保證產品的編程接口清晰明確,不至于讓開發者產生疑惑十分重要。
這種情況下,API命名約定就可以派上用場,它可以幫助您保持編程接口一致明確。另外,框架開發領域也存在一些特定的編程技術—或者說,這些技術對框架開發更加重要—例如版本管理,二進制兼容性,錯誤處理以及內存管理等。
在面向對象軟件庫的設計過程中,開發人員經常忽視對類、方法、函數、常量以及其他編程接元素的命名。本節討論大多數Cocoa接口通用的幾條命名約定。
一般性原則清晰
***是既清晰又盡可能地簡短,但不要為了追求簡短而喪失清晰性:
- insertObject:atIndex:好的命名
- insert:at:不清晰;插入什么?“at”表示什么?
- removeObjectAtIndex:好的命名
- removeObject:這樣命名也不錯,因為方法將移除通過參數引用的對象。
- remove:不清晰:要移除什么?
通常情況下,請不要縮寫事物的名稱,即使名稱很長,也應該把它完全拼寫出來。
- destinationSelection:好的命名
- destSel:不清晰
- setBackgroundColor:好的命名
- setBkgdColor:不清晰
您可能覺得某個縮寫眾所周知,但實際可能并非如此。特別是具有不同文化和語言背景的開發人員,在遇到您提供的方法或函數的名稱縮寫時,他們可能不明白其中的含義。
不過,有一些縮寫確實很常見并且有很長的使用歷史。因此,您可以繼續使用。請參看“可以接受的縮略名稱”一節以了解更多的信息。
要防止API的名稱出現歧義。這里的歧義是指名稱具有多種解釋方式。
sendPort:該方法是把端口發送出去還是返回發送端口呢?
displayName:該方法是顯示某個名稱還是返回用戶界面中接收者的標題呢?
一致性
請盡可能在Cocoa編程接口中保持名稱一致性。如果不太有把握做到這一點,則請瀏覽一下頭文件和參考文檔中的范例。
如果類方法利用多態,一致性就顯得尤其重要。因為在這種情況下,不同類用于完成同樣事件的方法必須具有相同的名稱。
- (int)tag:該方法同時定義在 NSView、 NSCell、 NSControl這三個類里面。
- (void)setStringValue:(NSString *):該方法定義于數個Cocoa類中
您可以參看 “方法參數”一節。
不能自我指涉
名稱不應該自我指涉。
NSString:可以使用
NSStringObject:該名稱自我指涉
掩碼的常量(可以使用位操作進行組合)不適用這條規則,作為通告的常量也不適用。
- NSUnderlineByWordMask
- NSTableViewColumnDidMoveNotification
前綴
前綴是編程接口名稱的重要部分,它們可以區分軟件的功能范疇。通常情況下,提供編程接口的軟件會被打包成框架(Foundation框架以及 Application Kit框架就是如此)或者是和框架緊密相關的產品,我們可以利用前綴來區分框架的功能范疇。另外,前綴可以防止第三方開發者定義的符號和蘋果公司定義的符號發生沖突(以及防止蘋果公司不同框架之間的符號發生沖突)。
前綴有規定的格式。它需要由兩個或者三個大寫字符組成,而且不能使用下劃線或者“子前綴”。下面是一些例子:
- 前綴Cocoa的框架
- NS Foundation框架
- NS Application Kit框架
- AB Address Book框架
- IB Interface Builder框架
在為類,協議,函數,常量以及通過typedef定義的結構命名時,請使用前綴。但在命名方法時,請不要使用前綴,因為方法已經存在于其定義類所創建的名稱空間中。同理,在定義結構的字段時,也不要使用前綴。
書寫約定
為API元素命名的時候, 請遵循下面這幾條簡單的書寫約定:
對于含有多個單詞的名稱,請不要使用標點符號標志和分割符(下劃線,破折號之類);而是要大寫每個單詞的首字符并且把這些單詞連續地拼寫在一起。然而如下這些限定條件您也需要注意:
方法的名稱要以一個小寫字符開頭,而名稱中單詞的首字符應該大寫。另外,請不要在方法的名稱中使用前綴。
- fileExistsAtPath:isDirectory:
如果方法名稱的開頭是某個眾所周知的縮略語,則該原則就不適用。例如TIFFRepresentation (NSImage),該名稱就不遵循該原則。
函數或常量名稱使用其關聯類的前綴,并且要名稱中單詞的首字符要大寫。
- NSRunAlertPanel
- NSCellDisabled
請不要使用下劃線作為前綴來表示私有的屬性,尤其是不要在類方法中使用。因為蘋果公司保留使用這種方式,如果第三方再使用,就有可能會導致名稱空間沖突。他們有可能在無意中用自己的方法覆蓋了一個已經存在的私有方法,這樣做將會帶來災難性的后果。請參看“私有方法”一節。您可以了解到我們提倡的可供私有API使用的約定。
類和協議的名稱
類的名稱應包含一個名詞,這個名詞明確地指示這個類(或者類對象)表示什么或者要做什么。此外,類名稱還應該包含適當的前綴。(請參考“前綴”一節)。Foundation框架以及Application Kit框架就有很多這樣的例子,例如NSString, NSDate,NSScanner,NSApplication,NSButton, 以及NSEvent。
我們應根據協議對方法的分組方式來為其命名:
大部分協議會把一些彼此相關但又不合類關聯的方法歸結在一起,形成一個特殊的方法集合。這種協議要合理地命名,不要將其和類名混淆。一種常見的約定是使用動名詞格式(“...ing”):
- NSLocking:好
- NSLock:差(看起來像是個類名)
有一些協議會把一些彼此無關的方法歸結在一起(不是創建幾個獨立的小協議)。對于這樣的協議,我們傾向于把它和一個類聯系起來,利用類來作為協議的主要表現。并且,我們約定讓此種協議使用和類一樣的名稱。
NSObject協議就是這種情況。它把一些不相關的方法組合在一起,這些方法有的用于查詢任何對象在類層次中的位置,有的可以調用對象的特定方法,有的可以用來增加或者減少對象的引用計數。由于NSObject類提供了這些方法的主要表現,所以我們使用類名作為協議名稱。
頭文件
頭文件的命名方式很重要,因為通過使用合理的命名約定,您利用文件名稱來指示文件中包含的內容:
聲明一個獨立的類或協議。.如果一個類或協議不屬于某個群,則請將其聲明放置在一份獨立的文件,并使用其名稱作為文件名。
- 頭文件:NSApplication.h
- 聲明:NSApplication類
聲明相關聯的類或者協議:如果一群聲明(類,類別以及協議)彼此相關,則請將它們放在一份文件,并使用主要的類或者協議名稱作為文件名。
- 頭文件:NSString.h
- 聲明:NSString 和 NSMutableString這兩個類
- 頭文件:NSLock.h
- 聲明:NSLocking協議以及 NSLock, NSConditionLock,和 NSRecursiveLock這幾個類
包含框架頭文件。每個框架都應該包含一份頭文件,它的名稱和框架名相同,而內容則包含了框架的全部公共頭文件。
- 頭文件:Foundation.h
- 框架:Foundation框架
為另一個框架里的某個類添加API。如果您在一個框架中聲明一些方法,而這些方法屬于另一個框架中某個類的范疇類,則請在原始類的名稱后加上“Additions”,然后將其作為頭文件的名稱。例如Application Kit框架中的NSBundleAdditions.h頭文件就是這種處理方式。
相關聯的函數和數據類型。如果一群函數,常量,結構以及其他數據類型彼此相互關聯,則請將它們放入到合理命名的頭文件,例如NSGaphics.h(位于Application Kit)。
小結:關于Cocoa 編碼指南 代碼命名基礎的內容介紹完了,希望本文對你有所幫助!關于Cocoa 編碼指南的更多內容,請參考以下幾篇文章。
Cocoa 編碼指南 代碼命名基礎: http://mobile.51cto.com/iphone-274085.htm
Cocoa 編碼指南 為函數命名: http://www.ekrvqnd.cn/php/viewart.php?artID=274108
Cocoa 編碼指南 為方法命名: http://www.ekrvqnd.cn/php/viewart.php?artID=274104
Cocoa 編碼指南 為實例變量和數據類型命名:http://www.ekrvqnd.cn/php/viewart.php?artID=274094
Cocoa 編碼指南 框架開發者使用技巧和技術http://www.ekrvqnd.cn/php/viewart.php?artID=274094