Objective-C 命名規(guī)范淺談
對(duì)于易維護(hù)的代碼而言,命名規(guī)則非常重要。
<br /> --- by Google style guide
如開(kāi)篇那句話,遵循命名規(guī)范不僅使得代碼可讀性提高,更能體現(xiàn)一個(gè)合格程序員的素質(zhì)
為什么這么說(shuō)
程序員寫(xiě)代碼不是只為自己寫(xiě)(這點(diǎn)非常重要).很多人在開(kāi)始寫(xiě)代碼的時(shí)候只專注于功能,認(rèn)為完成功能就是完成了大部分的任務(wù),其實(shí)還差的很遠(yuǎn),且不說(shuō)代碼質(zhì)量,就蹩腳的命名方式,奇怪的函數(shù)名稱就夠維護(hù)人員,或調(diào)用者tou... 這也是大家為什么要統(tǒng)一命名,形成規(guī)范的最初原因。
好的命名,或者遵循了規(guī)范的命名除了可以幫助其他programmer更方便的閱讀和維護(hù)你的代碼,更能幫助開(kāi)發(fā)者本身認(rèn)識(shí)到你在開(kāi)發(fā)一項(xiàng)什么功能,是屬性相關(guān)還是動(dòng)作相關(guān),這些在命名OC規(guī)范里都有提及.其實(shí),當(dāng)開(kāi)發(fā)者清楚地知道自己在開(kāi)發(fā)一項(xiàng)什么功能的時(shí)候,利用自然語(yǔ)言中的動(dòng)詞,連詞就可以寫(xiě)出符合規(guī)范的名稱,這也是OC的一大優(yōu)勢(shì)。有的人嫌棄OC語(yǔ)法冗贅,這的確是事實(shí),有時(shí)候初始化一個(gè)變量就要3行代碼,但代碼塊讀起來(lái)就像散文一樣,不需要太多的代碼注釋。
作為一個(gè)有追求的程序員,應(yīng)該時(shí)時(shí)刻刻注意和官方文檔要求靠攏,apple中api的命名,class中delegate的命名都是有規(guī)范的,勤看,勤記,那樣一段時(shí)間下來(lái)你寫(xiě)的代碼就會(huì)向官方文檔一樣漂亮。其他開(kāi)發(fā)者調(diào)用時(shí)也會(huì)很舒服.
對(duì)待程序,如果你真正熱愛(ài),請(qǐng)培養(yǎng)你的代碼潔癖
====================分割線=====================
自己在程序里遇到的命名規(guī)范
命名的基本準(zhǔn)則相信大部分人都知道:清晰,一致,無(wú)自我參照。命名版式也一般遵循駝峰命名或者Pascal,這里我們都采用駝峰命名法.在我們的項(xiàng)目中,我遇到最多的就是函數(shù),類的命名問(wèn)題。
類的命名不需要的體現(xiàn)技術(shù)細(xì)節(jié),沒(méi)有人去關(guān)注你這個(gè)類到底是怎么實(shí)現(xiàn)的,調(diào)用者只關(guān)注暴露出的接口即可。例如現(xiàn)在寫(xiě)一個(gè)功能,是做照片瀏覽的,采用嵌套scrollview實(shí)現(xiàn),里面的那層scrollview命名該怎么命名呢?我一開(kāi)始寫(xiě)的是WQSingleScrollview,組長(zhǎng)說(shuō)命名很奇怪,我不關(guān)注你怎么實(shí)現(xiàn)的,邏輯上它是一個(gè)什么東西,就怎么命名.說(shuō)白了他就是個(gè)pageView,后來(lái)就改成WQPhotoPageView。
函數(shù)命名。第一,你必須清楚地知道這個(gè)函數(shù)是做什么的,是實(shí)現(xiàn)動(dòng)作或者事件的就用動(dòng)詞開(kāi)頭,例如是拉取數(shù)據(jù)就用build或update開(kāi)頭。初始化的就已init開(kāi)頭。如果參數(shù)多,還可以用and,with這些連詞或是副詞連接各個(gè)item。
說(shuō)明:由于Cocoa函數(shù)還分為存取函數(shù)(Accessor Methods)、委托函數(shù)(Delegate Methods)和集合函數(shù)(Collection Methods),每種函數(shù)都有其詳細(xì)的規(guī)范,請(qǐng)?jiān)敿?xì)參閱《Apple Coding Guidelines for Cocoa》。
//關(guān)鍵字為屬性,不應(yīng)該使用and
- (int)runModalForDirectory:(NSString *)path andFile:(NSString *)name andTypes:(NSArray *)fileTypes;
//關(guān)鍵字為表示action,使用and
- (BOOL)openFile:(NSString *)fullPath withApplication:(NSString *)appName andDeactivate:(BOOL)flag;
-
除了命名的規(guī)范,代碼的版式也非常重要。OC的語(yǔ)法給人冗長(zhǎng)的感覺(jué),所以排版很重要。例如:
如果一行有非常多的參數(shù),更好的方式是將每個(gè)參數(shù)單獨(dú)拆成一行。如果使用多行,將每個(gè)參數(shù)前的冒號(hào)對(duì)齊。- (void)doSomethingWith:(GTMFoo *)theFoo rect:(NSRect)theRect interval:(float)theInterval { ... }
當(dāng)?shù)谝粋€(gè)關(guān)鍵字比其它的短時(shí),保證下一行至少有 4 個(gè)空格的縮進(jìn)。這樣可以使關(guān)鍵字垂直對(duì)齊,而不是使用冒號(hào)對(duì)齊:
- (void)short:(GTMFoo *)theFoo
longKeyword:(NSRect)theRect
evenLongerKeyword:(float)theInterval
{
...
}
以上都是錯(cuò)的
雖然有代碼規(guī)范,但寫(xiě)代碼的畢竟是一個(gè)個(gè)活生生的個(gè)體,不可能被這些條框限制死,最終要還是養(yǎng)成自己的一套代碼規(guī)范,遵循了基本的守則,讓代碼整潔,易懂即可。