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