《代碼整潔之道 clean code》這本書(shū)已經(jīng)關(guān)注很久,最近極其有欲望讀一下她袱蚓。主要是因?yàn)閭€(gè)人正兒八經(jīng)寫(xiě)代碼也有三年左右了,自己總結(jié)了一些代碼規(guī)范和關(guān)于代碼質(zhì)量的理解犯建,但是不能很好的說(shuō)服團(tuán)隊(duì)嚴(yán)格遵守诸狭,于是乎想尋求正統(tǒng)的代碼整潔之道,以提高代碼質(zhì)量辟躏。寫(xiě)文章只是想把書(shū)讀薄谷扣,有摘抄也有感想。今天先記錄第一篇捎琐,開(kāi)始~
1 核心觀念
代碼質(zhì)量與其整潔度成正比会涎,個(gè)人非常認(rèn)同,在工作中也有很痛的領(lǐng)悟瑞凑。在本書(shū)的序中提到末秃,軟件開(kāi)發(fā)工作中有百分之八十的時(shí)間是在對(duì)項(xiàng)目進(jìn)行維護(hù)(修修補(bǔ)補(bǔ)),也就是說(shuō)你寫(xiě)過(guò)的代碼籽御,會(huì)被反復(fù)的查看和修改(你自己或者他人)练慕。因此代碼的可讀性和易修改性(不能牽一發(fā)而動(dòng)全身)很重要。
在汽車(chē)行業(yè)有5S原則技掏,這是一套精益求精的規(guī)程:專(zhuān)注铃将、鎮(zhèn)定和思考,并非只關(guān)心實(shí)際作業(yè)哑梳,還要推動(dòng)整個(gè)項(xiàng)目的快速高效運(yùn)轉(zhuǎn)劲阎。5S哲學(xué)包括以下概念:
- 整理(或謂組織,sort-分類(lèi)排序)鸠真,搞清楚事物之所在很重要悯仙,比如通過(guò)恰當(dāng)?shù)拿?lèi)的手段龄毡。
- 整頓(或謂整齊,systematize-系統(tǒng)化)锡垄,物皆有其位稚虎,而后物盡歸其位(A place for everything, and everything in its place.)。每段代碼都該在你希望它所在的地方偎捎。
- 清潔(或謂shine-锃亮)蠢终,對(duì)于那種四處遺棄的帶注釋的代碼,以及反映過(guò)往或期望的無(wú)注釋代碼茴她,應(yīng)除之而后快寻拂。
- 標(biāo)準(zhǔn)化,一個(gè)項(xiàng)目組內(nèi)應(yīng)該使用一貫的代碼風(fēng)格和實(shí)踐手段丈牢。
- 身美(或謂自律)祭钉,在實(shí)踐中貫徹規(guī)程,并時(shí)時(shí)體現(xiàn)于個(gè)人工作上己沛,而且要樂(lè)于改進(jìn)慌核。
接受挑戰(zhàn)吧~~
Cleanliness is next to godliness(整潔近乎虔誠(chéng))
He who is faithful in little is faithful in much(守小節(jié)者不虧大節(jié))
A stitch in time saves nine(及時(shí)一針省九針)
The early bird catches the worm(早起的鳥(niǎo)兒有蟲(chóng)吃)
Don't put off until tomorrow what you can do today(今日事今日畢)
Mighty oaks from little acorns grow(巨木生于樹(shù)籽)
An ounce of prevention is worth a pound of cure(防病好過(guò)治病)
An apple a day keeps the doctor away(一天一個(gè)蘋(píng)果申尼,醫(yī)生遠(yuǎn)離我)
以上這些警句不管在東方還是西方都一定的影響垮卓,可以深思一下。
2 寫(xiě)糟糕代碼的理由與代價(jià)
在寫(xiě)代碼的時(shí)候师幕,心里總是有兩個(gè)“我”在爭(zhēng)斗粟按,是寫(xiě)得更完美一點(diǎn)呢?還是趕緊完成它霹粥,還有很多工作等著要做呢灭将?這是每個(gè)程序員都遇到過(guò)的困境,在面對(duì)這個(gè)困擾的時(shí)候后控,你做出了什么樣的選擇庙曙?你自己心里清楚,捫心自問(wèn)一下浩淘,舒服嗎捌朴?
當(dāng)我 review 別人的代碼時(shí),我也問(wèn)過(guò)他們馋袜,他們也承認(rèn)自己寫(xiě)的時(shí)糟糕的代碼男旗,卻總是說(shuō)項(xiàng)目時(shí)間緊,趕時(shí)間欣鳖,等有時(shí)間了再整理一下察皇。這么回答就是沒(méi)有認(rèn)識(shí)到糟糕代碼的危害力有多大,你現(xiàn)在節(jié)省的時(shí)間,會(huì)在你修改測(cè)試bug(甚至生產(chǎn)bug)的時(shí)候付出雙倍的時(shí)間什荣。
還有就是你的代碼一旦測(cè)試通過(guò)矾缓,就很少再動(dòng)你的那些代碼,即使你有時(shí)間稻爬,即使你想整理代碼嗜闻,也不敢,怕出新的bug桅锄。
或許有一天你回頭看看曾經(jīng)寫(xiě)過(guò)的代碼琉雳,自己都嫌棄。老板說(shuō)在上面添加一個(gè)新功能友瘤,你來(lái)做吧翠肘,偷偷瞟一眼自己親手造成的混亂,決定棄之不顧辫秧,努力去說(shuō)服老板束倍,咱們重新來(lái)過(guò)吧。你覺(jué)著老板心里會(huì)怎么想盟戏,這耗費(fèi)的時(shí)間完全不是添加一個(gè)功能的時(shí)間绪妹,這得付出多大的代價(jià)。
大家必須要認(rèn)識(shí)到這么一個(gè)勒布朗(LeBlanc)法則:稍后等于永不(Later equals never)柿究。
有一定經(jīng)驗(yàn)的開(kāi)發(fā)者都知道邮旷,你頂著期限的壓力,制造了混亂的代碼笛求,然后混亂的代碼又拖住了你的后腿廊移,接著就是你錯(cuò)過(guò)了期限糕簿。趕上期限的唯一方法就是始終盡可能的保持代碼整潔探入。
或許我們理由還有更多,比如需求變化背離了初期的設(shè)計(jì)懂诗,進(jìn)度太緊張蜂嗽,沒(méi)法好好干活,心里還罵那些愚蠢的經(jīng)理殃恒、苛刻的用戶(hù)植旧、沒(méi)用的營(yíng)銷(xiāo)方式±胩疲回頭想想病附,是不是自作自受,不夠?qū)I(yè)亥鬓?
3 什么是整潔代碼
代碼作品就像藝術(shù)品一樣完沪,有不同的流派,在大師的眼里,對(duì)于優(yōu)美與漂亮有不同的理解覆积。關(guān)于什么是整潔代碼書(shū)中講述很多大師的觀點(diǎn)听皿,各個(gè)側(cè)重點(diǎn)不同,總結(jié)一下:
- 有意義的命名宽档,代碼應(yīng)通過(guò)其字面表達(dá)含義尉姨;
- 沒(méi)有重復(fù)代碼;
- 全面覆蓋的單元測(cè)試吗冤;
- 提供清晰又厉、盡量少的API;
- 完美的錯(cuò)誤處理代碼椎瘟,不要忽略細(xì)節(jié)馋没;
- 性能調(diào)至最優(yōu),省得引誘別人做沒(méi)規(guī)矩的優(yōu)化降传;
- 盡量少的依賴(lài)關(guān)系篷朵,便于維護(hù);
- 盡量少的實(shí)體婆排,比如類(lèi)声旺、方法、函數(shù)等段只;
- 整潔的代碼(類(lèi)/函數(shù)/模塊)只做好一件事腮猖;
- 整潔的代碼看起來(lái)專(zhuān)為解決那個(gè)問(wèn)題而存在;
- 整潔的代碼簡(jiǎn)單直接赞枕,從不隱藏設(shè)計(jì)者的意圖澈缺;
- 整潔的代碼看起來(lái)像是某位特別在意她的人寫(xiě)的,沒(méi)有改進(jìn)的余地炕婶;
- 整潔的代碼淺顯易懂姐赡,絕不故作高深;
通過(guò)一些“編輯器回放”工具統(tǒng)計(jì)發(fā)現(xiàn)柠掂,在寫(xiě)代碼的時(shí)候项滑,閱讀其他模塊代碼的時(shí)間是你寫(xiě)代碼所花費(fèi)的時(shí)間的10倍,我們一直在閱讀舊代碼涯贞。在大部分情況下枪狂,我們不讀周邊的代碼就沒(méi)法寫(xiě)代碼。編寫(xiě)代碼的難度宋渔,取決于閱讀周邊代碼的難度州疾。因此,我們?cè)诰帉?xiě)代碼的時(shí)候付出更多努力皇拣,使寫(xiě)出的代碼閱讀起來(lái)很輕松严蓖,是非常值得的。
整潔代碼如同優(yōu)美的散文,讀起來(lái)令人身心愉悅谈飒,深合己意岂座。
最后來(lái)一條美國(guó)童子軍軍規(guī),非常符合我們的專(zhuān)業(yè)領(lǐng)域:讓營(yíng)地比你來(lái)時(shí)更干凈杭措。