作者: CyuyanAn ;

來源:C語言程序互動營


程序員代碼的質量是如何區別?



都說程序員與程序員的代碼質量是有區別的?這個應該怎麼區別呢?畢竟代碼就像是數學一樣,也可以進行通過語言或者代碼完成同樣的程序;

如果你還沒有發現代碼質量的區別,如果你從未見過優秀的代碼,或者從未見過糟糕的代碼,那麼本文將以直觀地對比,告訴你代碼質量究竟會有多大的區別。

[ 代碼量 ]

我們知道代碼量是顯示着功能的複雜程度,例如Windows XP的代碼量超過2000萬行,Linux內核有1500萬行(2012年)。然而代碼量和功能數量之間並非線性關係。

優秀的設計中,代碼量和功能數的關係是這樣的:


程序員代碼的質量是如何區別?


糟糕的設計中,代碼量和功能數的關係是這樣的:


程序員代碼的質量是如何區別?



並不是代碼多,就代表你的程序質量很好,正相反,利用短而精的代碼做出相同的程序,才能代表你的代碼是質量高的;就像人說話一樣,能用簡單的話說出來,比用更多的語說出來更簡單明瞭:層次清晰、職責單一、模塊化,方便擴展或者複用。功能的添加往往只是在現有框架中添加少量代碼。

然而質量差的程序設計中,層次混亂、互相耦合、難以閱讀,既難以複用又不易擴展。每當被要求添加功能時,不得不幾乎完整地實現整個功能的流程,並修復與原系統的所有兼容問題。

[ 註釋 ]

優秀的代碼中,註釋是這樣的:

程序員代碼的質量是如何區別?


糟糕的代碼中,註釋是這樣的:

程序員代碼的質量是如何區別?


質量好的程序代碼可以寫出讓人可以讀懂的代碼,而質量差的代碼只能由機器人翻譯出來了;

程序的註釋是爲了讓人讀得懂。多數優秀的代碼中,註釋幾乎接近代碼行數的一半,描述函數功能、解釋參數配置、指出陷阱所在。而糟糕的代碼中不僅不含這些註釋,甚至會保留大量殘餘代碼,可讀性差又難以重構。

[ 命名 ]

優秀的代碼中,命名是這樣的:

程序員代碼的質量是如何區別?


糟糕的代碼中,命名是這樣的:

程序員代碼的質量是如何區別?


命名是爲了讓代碼更加容易閱讀,使用規範的術語不僅更加易懂,同時也是開發者知識水平和開發經驗的表現。如果說以中文拼音命名顯得奇怪,那麼直接以a, b, c, d命名的便會顯得可恨,誰記得你的a是神馬東西!

看一個經典的例子,字符串替換:

程序員代碼的質量是如何區別?


稍微有點Javascript常識的便會想到正則表達式:

程序員代碼的質量是如何區別?


何必拷貝這一堆的代碼給老闆看呢?開發中確實有很多時候,直接拷貝代碼既能立竿見影地完成功能,又不會影響原有功能。但這樣的代碼多起來之後,萬一功能調整你便需要重新debug所有的副本。花一些時間學習更優雅的用法是值得的。

[ 函數 ]


保持函數的短小,使你的代碼更加易讀,例如:

程序員代碼的質量是如何區別?


將複雜的邏輯分步驟完成。如果寫在一起將會是這樣的:

程序員代碼的質量是如何區別?


相信我,一旦你寫了這樣的函數,它會隨着時間的推移變得越來越長,直到有一天,你也忘了其中的一段代碼到底是做什麼的。

事實上,複雜的函數不僅可以按照步驟劃分,更應按照層次來細化。不要在一個函數中進行不同層次的操作,否則它會變得非常難懂。

相关文章