作為程序員都應(yīng)該知道無論用任意語言開發(fā)任何程序,編寫的代碼不僅僅能夠讓機(jī)器正常編譯促绵,更重要的是自己或者團(tuán)隊(duì)其他開發(fā)者能夠讀懂代碼的含義攒庵。
因此作為一名合格的iOS程序員,應(yīng)該懂得一些常用的Cocoa框架編碼規(guī)范败晴,Apple開發(fā)者中心提供一套權(quán)威的編碼規(guī)范:Introduction to Coding Guidelines for Cocoa
基于Apple提供的編碼規(guī)范文檔浓冒,我從中翻譯并整理一些較為常用的Cocoa編碼規(guī)范。
本文主要涉及Cocoa編碼規(guī)范文檔中“基本命名規(guī)則”部分尖坤。
基本命名規(guī)則
1. 一般原則
代碼越簡潔明了越好稳懒,但是我們不能為了簡潔,而導(dǎo)致語義不清晰:
代碼 | 代碼評(píng)價(jià) |
---|---|
insertObject:atIndex: | 不錯(cuò) |
insert:at: | 不明確慢味,什么被插入了场梆?at指的是什么? |
removeObjectAtIndex: | 不錯(cuò) |
removeObject: | 不錯(cuò) |
remove: | 不明確纯路,移除了什么辙谜? |
一般情況下,有時(shí)對(duì)象名稱很長感昼,最好不要進(jìn)行縮寫装哆,而是采用全拼的名稱:
代碼 | 代碼評(píng)價(jià) |
---|---|
destinationSelection | 不錯(cuò) |
destSel | 不明確 |
setBackgroundColor: | 不錯(cuò) |
setBkgdColor: | 不明確 |
你可能認(rèn)為有些縮寫是眾說周知的,但這種情況并不絕對(duì)定嗓,尤其是當(dāng)開發(fā)者和你身處的文化背景不一樣時(shí)蜕琴,這些縮寫就很有可能產(chǎn)生歧義。
當(dāng)然宵溅,部分縮寫已經(jīng)成為了公知了凌简,你可以繼續(xù)使用它們,請(qǐng)參考:Acceptable Abbreviations and Acronyms
避免有歧義的API命名恃逻,例如雏搂,方法名包含多個(gè)含義:
代碼 | 代碼評(píng)價(jià) |
---|---|
sendPort | 是發(fā)送端口還是返回端口? |
displayName | 顯示一個(gè)名字還是返回用戶界面中消息接收者需要的標(biāo)題寇损? |
當(dāng)開發(fā)者擁有一個(gè)實(shí)現(xiàn)多態(tài)方法的類凸郑,保持類接口命名一致性非常重要。例如:不同類中處理同一個(gè)任務(wù)的方法命名應(yīng)該是一致的矛市。
代碼 | 代碼評(píng)價(jià) |
---|---|
- (NSInteger)tag | 在 NSView, NSCell, NSControl類中都要定義 |
2. 前綴
前綴在編程接口中非常重要芙沥。一個(gè)軟件擁有不同的功能模塊,通常它們封裝在一個(gè)框架或者緊密相關(guān)的框架中。前綴避免了第三方開發(fā)者與蘋果提供的框架間的命名沖突問題而昨。
前綴是有規(guī)定格式的救氯,通常由2或3個(gè)大寫字母組成,而不是下劃線或者“子前綴”歌憨。例如:
前綴 | Cocoa 框架 |
---|---|
NS | Foundation |
NS | Application Kit |
AB | Address Book |
IB | Interface Builder |
通常使用前綴命名類着憨、協(xié)議、函數(shù)务嫡、常數(shù)享扔、自定義結(jié)構(gòu)體,但是不要使用前綴來命名方法植袍。
3. 書寫規(guī)則
對(duì)于由多個(gè)單詞組成的名字惧眠,不要使用標(biāo)點(diǎn)符號(hào)作為名稱的一部分或者分割符,例如:下劃線于个、破折號(hào)等氛魁。
最好使用“駱駝”風(fēng)格的命名規(guī)則,例如:runTheWordsTogether厅篓。
有幾點(diǎn)需要注意一下:
- 對(duì)于方法名稱秀存,首字母小寫,不要使用前綴羽氮,
例如:fileExistsAtPath:isDirectory:
但是有一種例外情況或链,就是方法名稱已通用的縮寫開頭,
例如:TIFFRepresentation (NSImage) - 對(duì)于函數(shù)和常數(shù)档押,使用和類相同的前綴澳盐,并且前綴后第一個(gè)單詞大寫。
例如:NSRunAlertPanel 和 NSCellDisabled
避免在方法名前加下劃線來表示私有方法(在實(shí)例變量名稱前加下劃線是被允許的)令宿,第三方開發(fā)者使用可能導(dǎo)致命名沖突叼耙。
4. 類和協(xié)議命名
類名應(yīng)該包含一個(gè)名詞,能夠清晰地表達(dá)類(或類對(duì)象)作用或者含義粒没。
類應(yīng)該有一個(gè)合適的前綴名筛婉。
例如:NSString, NSDate, NSScanner, NSApplication, UIApplication, NSButton, 和 UIButton
協(xié)議的命名應(yīng)該根據(jù)使用協(xié)議的相應(yīng)類行為進(jìn)行命名。
- 大多數(shù)協(xié)議包含的方法癞松,與任何特定類都是無關(guān)的爽撒。為了讓協(xié)議命名不與類相互混淆,通常的規(guī)則是:使用動(dòng)名詞(...ing)形式:
| 代碼| 評(píng)價(jià)|
| :-|:-|
| NSLocking| 不錯(cuò)
| NSLock| 不太好响蓉,看起來像類名
- 有些協(xié)議包含了一些無關(guān)方法(而不是創(chuàng)建多個(gè)獨(dú)立的小協(xié)議)硕勿。這些協(xié)議與某個(gè)類的關(guān)聯(lián)緊密,這個(gè)類是該協(xié)議的一種體現(xiàn)厕妖。在這種情況下首尼,協(xié)議名稱就應(yīng)該和類名稱保持一致。
例如:NSObject協(xié)議言秸,該協(xié)議包含一些方法可以查詢?nèi)我忸愒诟割愔械膶哟挝恢萌砟堋S捎贜SObject類實(shí)現(xiàn)了協(xié)議的大部分方法,所以協(xié)議就用類名進(jìn)行命名了举畸。