作為一個(gè)程序員,大部分時(shí)候,如果不是一個(gè)人承包整個(gè)項(xiàng)目,那么有1/3的時(shí)間在寫代碼,1/3的時(shí)間在看別人寫的代碼,剩下的1/3的時(shí)間在摸魚。
那么如何提高摸魚的時(shí)間?看別人寫代碼十分頭疼,分分鐘想罵人,自己卻又寫得龍飛鳳舞,接下來,來看看如何進(jìn)行代碼重構(gòu),來提升一下自己的大神氣質(zhì)。
- 提煉函數(shù)
程序猿大部分時(shí)間都在與函數(shù)打交道,我們都希望看到前前前同事寫的函數(shù)代碼具有這樣特點(diǎn):
- 良好的命名:比如用戶登錄,寫成ada(){}如果不寫注釋,還需要去看代碼到底封裝了神馬東西,是不是想罵gou?寫成userLogin(){}是不是一目了然?連注釋都不用寫了,還可以練習(xí)英語。
- 函數(shù)長度適中,功能獨(dú)立:如果一個(gè)函數(shù)過長,不得不加上若干的注釋說明,才能夠讓這個(gè)函數(shù)顯得易讀一些,都這樣了還想邏輯清晰明了嗎?我們應(yīng)該避免出現(xiàn)超大函數(shù),如果代碼中有一段代碼可以獨(dú)立出來,那么最好把這個(gè)代碼放進(jìn)另外一個(gè)獨(dú)立的函數(shù)中,這樣做的優(yōu)點(diǎn):
1)有助于代碼復(fù)用
2)獨(dú)立出來的函數(shù)更容易被覆寫,一個(gè)項(xiàng)目開發(fā)完了,可能會重復(fù)迭代,次數(shù)多了,自己都看不懂自己寫的代碼。
- 合并重復(fù)的條件片段
如果處理鏈接上的頁數(shù)跳轉(zhuǎn),當(dāng)頁數(shù)大于或者小于總頁數(shù)的時(shí)候去首頁,其他正常跳轉(zhuǎn):
if(currPage <=0 || currPage >totalPages){
currPage = 0;
jump(currPage);// 跳轉(zhuǎn)
}else {
jump(currPage);// 跳轉(zhuǎn)
}
可以把公共的部分獨(dú)立出來:
if(currPage <=0 || currPage >totalPages){
currPage = 0;
}
jump(currPage);// 跳轉(zhuǎn)
- 把條件分支語句提煉成函數(shù)
- 合理使用循環(huán)
- 提前讓函數(shù)退出代替嵌套條件分支
如果代碼不滿足當(dāng)前設(shè)定的條件,那么對下面的代碼不再感興趣,那應(yīng)該在不感興趣的時(shí)候就提供出口,而不需要再繼續(xù)執(zhí)行下面大量的、對預(yù)期結(jié)果無用的代碼。
- 傳遞對象參數(shù)代替過長的參數(shù)列表
有時(shí)候一個(gè)函數(shù)可以接收多個(gè)參數(shù),而參數(shù)的數(shù)量越多,函數(shù)越難理解和使用,這時(shí)候可以把參數(shù)放入一個(gè)對象內(nèi),然后把參數(shù)傳入對象中使用。這樣就不必關(guān)心參數(shù)的數(shù)量和順序了,只要保證key不變就可以了。
- 盡量減少參數(shù)數(shù)量
我們需要搞清楚設(shè)置為參數(shù)的變量的具體意義,當(dāng)一個(gè)函數(shù)不需要參數(shù)就能夠使用的時(shí)候,是深受開發(fā)者喜愛的。
- 少用三目運(yùn)算符
如果條件太多,目運(yùn)算符就會變得沉重,這樣修改起來也是很吃力的。
- 合理使用鏈?zhǔn)秸{(diào)用
- 適當(dāng)?shù)貙懽⑨?/li>
要寫有什么用,而不是復(fù)述代碼
如下,這樣的注釋是不是還不如不寫:
/*
* 定義了一個(gè)變量,當(dāng)show等于1的時(shí)候,fresultData等于show的時(shí)候,值為pagesList_1,否則為:pagesList_2
*/
let resultData = show==1?:pagesList_1:pagesList_2 ;
對比:
let resultData = show==1?:pagesList_1:pagesList_2 ;// 1: A類訂單結(jié)果,其他值:B類訂單結(jié)果
- 用return退出多重循環(huán)
比如使用雙重循環(huán),內(nèi)部循環(huán)達(dá)到某個(gè)臨界值的時(shí)候跳出循環(huán),這時(shí)候使用return比使用break可讀性更高。






