今天看了一篇關(guān)于代碼規(guī)范的文章,感覺自己寫代碼還是比較注重規(guī)范的,不談維護性,至少看上去代碼很整潔,很規(guī)范簸呈。于是乎,寫一篇文章來記錄下讓更多的開發(fā)可以學(xué)習(xí)下;規(guī)范其實是沒有一個標準的蒿涎,有些東西你遵守了他就是規(guī)范,不遵守就不是規(guī)范惦辛,但是你遵守了卻能讓代碼規(guī)范起來劳秋。
摘錄了一些比較常見的規(guī)范,括號里寫了自己的一些看法胖齐。
1玻淑、 在每個方法的定義前留白一行,也就是在方法和方法之間留空一行呀伙。(很多人不空行补履,導(dǎo)致代碼看起來一大坨,很不舒服剿另,閱讀性很差)
2箫锤、 功能相近的方法要放在一起贬蛙,并推薦使用#pragma mark - ***來導(dǎo)航代碼,切分代碼塊谚攒。這樣可以方便函數(shù)的查找阳准。并且可以使用快捷鍵control+6 來快速查找方法的位置。(這個還是很有必要的馏臭,分門別類溺职,找起來很方便,不至于跨度很大)
3位喂、 二元運算符和參數(shù)之間要有一個空格浪耘,如賦值號=左右各留一個空格。(這個雖然很小的點塑崖,但是卻能讓代碼更美觀七冲,不至于代碼很擁擠)
self.myString = @"235423rew523452345";
4、 盡量減少在代碼中直接使用數(shù)字常量规婆,而使用宏定義等方式澜躺。如:MAX_NUMBER_PHONE替代8等等。這樣我們搜索也比較方便抒蚜。(建議直接在工程中開一個單獨的文件去存儲哪些需要定義很多公用常量的情況掘鄙,在大型企業(yè)級項目中顯得尤為重要)
5、 宏定義全部字母大寫嗡髓。(很多新手容易會和常量的定義混淆操漠,甚至以k開頭大小寫混合)
6、對傳入?yún)?shù)的保護或者說是否為空的判斷饿这,盡量不要使用if(!obj),而使用NSAssert斷言來處理浊伙。NSAssert是系統(tǒng)定義的宏。
NSAssert(myName != nil, @"myName參數(shù)為空");
如果條件判斷為真长捧,則程序繼續(xù)執(zhí)行嚣鄙。
如果判斷條件為假,則拋出異常串结,異常內(nèi)容為后面定義的字符串哑子。
7、if-else超過四層的時候肌割,就要考慮重構(gòu)卧蜓,多層的if-else結(jié)構(gòu)很難維護。(事實上在開發(fā)時很多人都會if else寫一大坨声功,甚至還有很多魔法數(shù)字烦却,讓人看不懂)
8、當(dāng)需要一定條件才執(zhí)行某項操作時先巴,最左邊的應(yīng)該是最重要的代碼其爵,不要將最重要的代碼內(nèi)嵌到if中冒冬。如良好的風(fēng)格是:
- (void) someMethod {
if(![someOther boolValue]) {
return;
}
//最重要的代碼寫在這里;
}
反面教材:
- (void) someMethod {
if([someOther boolValue]) {
//重要代碼摩渺;
}
}
9简烤、 UIView的子類初始化的時候,不要進行任何的布局操作摇幻。布局操作應(yīng)該在layoutSubviews里面做横侦;需要重新布局的時候調(diào)用setNeedsLayout,而不要直接調(diào)用layoutSubviews绰姻。(一般代碼創(chuàng)建的時候這樣做)
10枉侧、保持公共API簡單,也就是保持.h文件簡單狂芋。放在.h中聲明的函數(shù)都是會被公開的榨馁,如果根本就沒必要對其他類公開,不要在.h中聲明帜矾。OC中的方法都是公有方法翼虫,沒有私有方法一說。
11屡萤、 推薦方法的第一個花括號直接跟在方法體后珍剑,而不是另起一行,這樣可以減少代碼行死陆。(這個看個人習(xí)慣招拙,我比較推薦這種寫法,而且蘋果默認生成的方法也是這樣)
12翔曲、 推薦方法體中的第一行留空迫像,最后一行不留空劈愚,這樣一個方法就會比較清晰瞳遍。如圖:
但是如果該花括號里面又是一個if,for之類的帶花括號的語句塊菌羽,那么上述的第一行可以不留空掠械。
同樣,如果花括號內(nèi)第一行是注釋的話注祖,第一行也可以不留空猾蒂。注釋也起到了分隔代碼的作用,看起來比較清晰是晨。
再者肚菠,如果花括號內(nèi)只有一行代碼,第一行可以不留空罩缴。
13蚊逢、 由于提到編程經(jīng)驗层扶,就不得不提到版本控制。務(wù)必去學(xué)會SVN或者Git烙荷,就算你是獨立開發(fā)镜会,也要學(xué)會控制自己的代碼,當(dāng)然终抽,你要經(jīng)常備份你的代碼戳表。(這個對代碼的管理比較方便)