可持續(xù)開發(fā)不僅在于項(xiàng)目架構(gòu)設(shè)計(jì),還與代碼質(zhì)量密切相關(guān),代碼的整潔度和質(zhì)量成正比。—— Robert C. Martin, “Clean Code”
如果你還沒(méi)有發(fā)現(xiàn)代碼質(zhì)量的區(qū)別,如果你從未見過(guò)優(yōu)秀的代碼,或者從未見過(guò)糟糕的代碼,那么本文將以直觀地對(duì)比,告訴你代碼質(zhì)量究竟會(huì)有多大的區(qū)別。
[ 代碼量 ]
我們知道代碼量顯示著功能的復(fù)雜程度,例如Windows XP的代碼量超過(guò)2000萬(wàn)行,Linux內(nèi)核有1500萬(wàn)行(2012年)。然而代碼量和功能數(shù)量之間并非線性關(guān)系。
優(yōu)秀的設(shè)計(jì)中,代碼量和功能數(shù)的關(guān)系是這樣的:
糟糕的設(shè)計(jì)中,代碼量和功能數(shù)的關(guān)系是這樣的:
優(yōu)秀的系統(tǒng)往往會(huì)有優(yōu)秀的結(jié)構(gòu)設(shè)計(jì):層次清晰、職責(zé)單一、模塊化,方便擴(kuò)展或者復(fù)用。功能的添加往往只是在現(xiàn)有框架中添加少量代碼。
然而糟糕的設(shè)計(jì)中,層次混亂、互相耦合、難以閱讀,既難以復(fù)用又不易擴(kuò)展。每當(dāng)被要求添加功能時(shí),不得不幾乎完整地實(shí)現(xiàn)整個(gè)功能的流程,并修復(fù)與原系統(tǒng)的所有兼容問(wèn)題。
[ 注釋]
優(yōu)秀的代碼中,注釋是這樣的:
糟糕的代碼中,注釋是這樣的:
最愚蠢的程序員都能寫出機(jī)器能讀懂的代碼,而優(yōu)秀的程序員能寫出人可以讀懂的代碼。
程序的注釋是為了讓人讀得懂。多數(shù)優(yōu)秀的代碼中,注釋幾乎接近代碼行數(shù)的一半,描述函數(shù)功能、解釋參數(shù)配置、指出陷阱所在。而糟糕的代碼中不僅不含這些注釋,甚至?xí)A舸罅繗堄啻a,可讀性差又難以重構(gòu)。
[ 命名]
優(yōu)秀的代碼中,命名是這樣的:
糟糕的代碼中,命名是這樣的:
命名是為了讓代碼更加容易閱讀,使用規(guī)范的術(shù)語(yǔ)不僅更加易懂,同時(shí)也是開發(fā)者知識(shí)水平和開發(fā)經(jīng)驗(yàn)的表現(xiàn)。如果說(shuō)以中文拼音命名顯得奇怪,那么直接以a, b, c, d命名的便會(huì)顯得可恨,誰(shuí)記得你的a是神馬東西!
看一個(gè)經(jīng)典的例子,字符串替換:
稍微有點(diǎn)Javascript常識(shí)的便會(huì)想到正則表達(dá)式:
何必拷貝這一堆的代碼給老板看呢?開發(fā)中確實(shí)有很多時(shí)候,直接拷貝代碼既能立竿見影地完成功能,又不會(huì)影響原有功能。但這樣的代碼多起來(lái)之后,萬(wàn)一功能調(diào)整你便需要重新debug所有的副本?;ㄒ恍r(shí)間學(xué)習(xí)更優(yōu)雅的用法是值得的。
[ 函數(shù) ]
保持函數(shù)的短小,使你的代碼更加易讀,例如:
將復(fù)雜的邏輯分步驟完成。如果寫在一起將會(huì)是這樣的:
相信我,一旦你寫了這樣的函數(shù),它會(huì)隨著時(shí)間的推移變得越來(lái)越長(zhǎng),直到有一天,你也忘了其中的一段代碼到底是做什么的。
事實(shí)上,復(fù)雜的函數(shù)不僅可以按照步驟劃分,更應(yīng)按照層次來(lái)細(xì)化。不要在一個(gè)函數(shù)中進(jìn)行不同層次的操作,否則它會(huì)變得非常難懂。
-
代碼
+關(guān)注
關(guān)注
30文章
4753瀏覽量
68368 -
程序員
+關(guān)注
關(guān)注
4文章
950瀏覽量
29768
原文標(biāo)題:沒(méi)有對(duì)比就沒(méi)有傷害,優(yōu)秀的代碼VS糟糕的代碼
文章出處:【微信號(hào):xx-cyy,微信公眾號(hào):C語(yǔ)言編程基礎(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論