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