文章出處

  什么樣的代碼才是好代碼?衡量代碼的好壞的指標或者維度有很多,比如性能好、架構好、高內聚等,這些指標的側重點各不相同,不同的開發人員的關注的重點也各不相同。我個人更喜歡簡單的可讀性高的代碼,我主要從以下幾個維度衡量代碼是否良好:

代碼是可工作的

寫代碼的目的是要為了解決特定問題的,因此無論如何,代碼首先是可工作的,能解決特定的問題。可工作的包含有兩層含義:一是從功能角度來說能滿足用戶的需求,二是從性能角度來說要滿足當前基本的性能需求。所以可工作是衡量代碼好壞的前置條件,只考慮代碼本身不考慮可工作性是舍本取末。

代碼是可讀性高的

代碼是開發人員來開發和維護的,而且在軟件漫長的生命周期中,通常會由不同的開發人員來維護的,如果代碼的可讀性很差,那將來的維護就將是一個噩夢。我們寫的代碼是給開發人員看的,絕對不是給機器看的(編譯后的代碼是給機器看的,編譯器會幫我們去掉無意義的空行等),因此代碼必須首先是可讀性高的。

那什么是可讀性高的代碼呢?從 coding style 角度來說,有意義的命名、添加必要的文檔和注釋、類和方法不要太長、每一行也不要太長、添加必要的空行以及必要的縮進等,具體可以參考《C++編程規范》和《重構改善既有代碼的設計》。另外一方面就是從代碼的結構來定義,例如代碼是高內聚、低耦合的,代碼是簡單的,這三個方面下面會有詳細描述。

代碼是簡單的

我們先來看一下什么是復雜的代碼,比如說美其名曰為了代碼的擴展性,使用了好多設計模式和軟件開發原則,結果就是明明可以用很簡單幾行代碼搞定的事情,結果用了幾十行代碼甚至更多,而且代碼用了各種酷炫的技術,但是事實上大部分的擴展性可能一輩子也沒有發生過,從敏捷開發角度來說,這是非常典型的過度設計。敏捷開發不是不考慮設計,只是不推崇過度設計,比如考慮 10 年后系統的擴展性是沒有任何意義的,另外一種場景是只是做一個簡單的后臺管理系統,但是卻花大量的精力考慮高并發也是沒有意義的,過度設計的代碼通常是復雜的。

所以在適度考慮代碼的可擴展性的基礎上,能不用設計模式就不要用設計模式,能不用新的、復雜的技術就不用新的、復雜的技術,技術夠用就好,代碼越簡單越好,有人說代碼太簡單是不是有點 low,其實寫出高質量的簡單代碼遠比寫出復雜的代碼難度高,尤其是系統比較復雜時,保持代碼的簡單性難度是非常大的。

所以說簡單的代碼就是:代碼所有人都看得懂,尤其是新人,但是又具備一定的擴展性和維護性,簡單的講就是簡約而不簡單。復雜的代碼首先對讀代碼的人要求就很高,最終導致代碼很難維護。代碼是簡單的是代碼可讀性高的一個方面。

代碼是高內聚的

內聚是從功能角度來度量模塊內的聯系,代碼關聯性比較強的代碼應該放在內聚在一起,形成一個獨立的功能模塊,可以是一個獨立的類,也可以是一個微服務。其實判斷代碼是否內聚一個比較簡單的方法就是看你能否給代碼或者服務給一個貼切的名字,如果代碼功能不內聚,我們是很難用一個簡短的名字來表示它的含義的。

代碼是低耦合的

耦合性(Coupling),也叫耦合度,是對模塊間關聯程度的度量。耦合的強弱取決與模塊間接口的復雜性、調用模塊的方式以及通過界面傳送數據的多少。模塊間的耦合度是指模塊之間的依賴關系,包括控制關系、調用關系、數據傳遞關系。模塊間聯系越多,其耦合性越強,同時表明其獨立性越差。

耦合比較高的代碼危害比較大,最常見的表現就是改一個模塊的代碼會影響許多其它模塊,最終必然導致大家不敢修改舊的代碼,只能不停的添加新的接口,系統的可維護性非常差。

看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170308/115493.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()