幾個(gè)月前寫了一篇文章“如何寫出難以維護(hù)的代碼”,從中能大概了解到不好維護(hù)的代碼是什么樣,有哪些壞味道,那肯定有人會(huì)反問,難以維護(hù)的代碼見的太多了,也知道長(zhǎng)什么樣,但是對(duì)于好維護(hù)的代碼是什么樣的比較模糊,帶著這個(gè)問題,本人讀完了世界軟件開發(fā)大師馬丁的《代碼整潔之道》這本書,來了解下大師眼中的整潔代碼畫像是什么樣的,相信能給你帶來不一樣的理解和感悟。
關(guān)于整潔代碼,沒有明確的定義,有多少程序員就有多少種定義。下面先看下幾位大師是如何定義的。
C++語言發(fā)明者Bjarne Stroustrup提到:
代碼應(yīng)該優(yōu)雅高效,代碼邏輯應(yīng)該直截了當(dāng),讓缺陷難以隱藏,盡量減少依賴關(guān)系,便于維護(hù);按照某種分層策略完善錯(cuò)誤處理,性能調(diào)到最優(yōu),不會(huì)讓別人修改的更混亂;整潔的代碼只做一件事。
?
《面向?qū)ο蠓治雠c設(shè)計(jì)》一書作者Grad Booch提到:
整潔的代碼簡(jiǎn)單直接,如同散文一樣優(yōu)美,從不隱藏設(shè)計(jì)者的意圖,代碼抽象干凈利落,控制語句直截了當(dāng)。
?
Eclipse戰(zhàn)略教父Dave Thomas這么定義:
整潔的代碼應(yīng)可由其他開發(fā)者閱讀和增補(bǔ),應(yīng)當(dāng)有單元測(cè)試和驗(yàn)收測(cè)試,使用有意義的命名,只提供一種而非多種做一件事的途徑,只有盡量少的依賴關(guān)系,而且要明確地定義和提供清晰、盡量少的API。
?
《修改代碼的藝術(shù)》一書作者M(jìn)ichael Feathers定義:
整潔代碼應(yīng)該是特別在意代碼的人才能寫出來的,幾乎沒有改進(jìn)的余地,作者各種情況都想到了,如果你想改進(jìn)它,總會(huì)回到原點(diǎn),總會(huì)贊嘆寫代碼的人的專心和認(rèn)真。
?
《極限編程實(shí)施》作者Ron Jeffries提出整潔代碼:
能通過所有測(cè)試,沒有重復(fù)代碼,代碼能體現(xiàn)設(shè)計(jì)理念,盡量減少類,方法以及函數(shù)。
?
綜合以上幾位大師對(duì)整潔代碼的定義闡述,可以歸納總結(jié)一下整潔代碼的畫像:
1.體現(xiàn)設(shè)計(jì)理念,這個(gè)整潔代碼特性在以上大師的定義里面多次提到了,Grady提到整潔代碼不會(huì)隱藏設(shè)計(jì)意圖,Ron提到整潔代碼一看就知道采用了什么樣的設(shè)計(jì)理念。體現(xiàn)設(shè)計(jì)理念看上去有點(diǎn)虛,但是實(shí)際上我認(rèn)為是最重要的一點(diǎn),所謂代碼即設(shè)計(jì),只要能回答代碼為什么這么寫,就說明你的代碼有設(shè)計(jì)思想在里面,即便一行代碼都能體現(xiàn)出設(shè)計(jì)理念,比如一個(gè)有意義的命名也是設(shè)計(jì)的一種表現(xiàn)。
2.沒有重復(fù)代碼,如果你兩處代碼相同或者大部分重復(fù),說明代碼不夠整潔,同時(shí)說明代碼沒有去做好設(shè)計(jì)。消除重復(fù)代碼意味著減少類和方法以及相關(guān)API。
3.代碼只做一件事,很多代碼由于想做太多事,目的不明確,意圖混亂,結(jié)果代碼變得很糟糕,代碼只做一件事,也稱單一職責(zé),這個(gè)幾乎是很多軟件設(shè)計(jì)里面經(jīng)常提到的一個(gè)警句,這個(gè)原則看似很簡(jiǎn)單,但是實(shí)際上執(zhí)行起來不是那么簡(jiǎn)單,或者說,一時(shí)堅(jiān)持這個(gè)原則很容易,難的是一直堅(jiān)持這個(gè)原則,如果始終能踐行這個(gè)原則,代碼整潔度能達(dá)到質(zhì)的飛躍。
4.代碼好閱讀,關(guān)于閱讀,Bjarne用“優(yōu)雅”來形容,優(yōu)雅意味著優(yōu)美雅致,所以在他看來,代碼應(yīng)該優(yōu)美,給人以愉悅感,Grad也提到代碼應(yīng)該像散文一樣優(yōu)美,讓閱讀的人看完一段想看下一段,能很明顯的展現(xiàn)出解決問題的表達(dá)力和張力,閱讀者會(huì)不停的發(fā)出“啊哈,應(yīng)該這樣來處理!”的感嘆。反之,如果代碼不好閱讀,閱讀者看完后還需要猜測(cè)所表達(dá)的意思,對(duì)所實(shí)現(xiàn)的功能持懷疑態(tài)度,甚至有心驚膽戰(zhàn)的心理,會(huì)在心里不停的反問:"不會(huì)吧,這都可以在線上運(yùn)行?”我們?cè)谛薷拇a或?qū)懶麓a之前都要閱讀周邊代碼,如果閱讀代碼很難,則寫代碼也會(huì)很難,據(jù)統(tǒng)計(jì)讀代碼和寫代碼時(shí)間比例是10:1,編寫代碼的難度,取決于讀周邊代碼的難度。要想干得快,要想早點(diǎn)做完,要想輕松寫代碼,先讓代碼易讀吧。
5.代碼好修改,Dave提到整潔代碼應(yīng)該可以讓其他開發(fā)者進(jìn)行增補(bǔ),也就是很容易進(jìn)行功能的增加,畢竟很多系統(tǒng)代碼都要不停的迭代更新,需要基于原代碼進(jìn)行增補(bǔ),所以代碼的易修改就顯得格外的重要,試想如果一個(gè)開發(fā)者寫的代碼別人沒法修改或者不敢改,那你說這隱患有多大。我們經(jīng)常嘴巴提到的系統(tǒng)可維護(hù)性,實(shí)際上說的更具體點(diǎn),更多的指的是代碼的可修改方面。
?
將以上5點(diǎn)整潔代碼的畫像總結(jié)一句話:
?
?
體現(xiàn)設(shè)計(jì)理念,代碼不重復(fù),只做一件事,好閱讀和修改!
審核編輯 黃宇
-
API
+關(guān)注
關(guān)注
2文章
1472瀏覽量
61749 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68231
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論