善用SourceMonitor+Astyle,讓代碼維護者不再罵娘

1. 什麼樣的代碼讓你想罵娘?

什麼樣的代碼最想讓你罵娘,是這樣的,代碼層層嵌套

是這樣的?

或者是這樣的密密麻麻,捨不得多一行免費空格

這裏寫圖片描述

又或者是那種又臭又長的代碼呢?

代碼除了用來運行外,還有很重要的就是閱讀,給自己閱讀,或者給他人閱讀,如果幾個月後你自己都看不下去自己以前寫的代碼,呵呵…

2. 我們需要漂亮的代碼

愛美之心,人皆有之。漂亮的代碼,也是我們程序猿的追求,它不僅能夠完成要求的功能,而且還要整齊,有條理,易於理解。

漂亮的代碼能夠增強可讀性,同時也減弱了出錯的概率。最關鍵的一點,漂亮的代碼不會被罵娘。

具體來說,漂亮的代碼通常:
1. 代碼縮進
2. 分支語句嵌套的層數較少
3. 每個函數的代碼行數不會太多
4. 變量的命名有統一的風格
5. 文件命名有統一的風格
6. 註釋有統一的風格

如此等等,這些都是實踐中總結出來的結晶。也許你也注意到了,這些東西不就是編程規範嗎?確實是如此。爲了寫出漂亮的代碼,很多公司都會有自己的編程規範。
某些公司,還會對編程規範進行考試,足見其重視程度。

3. 善用佳軟,助力代碼變身

3.1 AStyle :一鍵代碼格式化

作爲一個狂放不羈的男子,我寫代碼從來不回頭,怎麼可能管你什麼代碼風格。尤其個人偏愛Linux,代碼風格也是Linux的。對於一些非Linux代碼風格的項目來說,在寫完代碼後,難道讓我對着編程規範將函數內的大括號一個一個單獨一行?
這裏寫圖片描述

我需要一鍵格式化,就讓我的代碼風格由Linux變成GNU風格,變成JAVA風格。在我不高興的時候,還能瞬間變回來。

我需要的就是 AStyle –支持”魔法換膚”,一鍵變換代碼風格,堪稱編碼界的美圖秀秀。

AStyle(Artistic style),可以集成到Eclipse,VS,SourceInsight等工具中,對代碼進行格式化、規範風格。AStyle默認支持Linux,ANSI,GNU,JAVA等風格,也支持自定義風格。
當不同編碼風格的程序員爲一個項目共同貢獻代碼時,特別項目週期緊張時期,經常會出現各式各樣的代碼導致極低的可讀性和可維護性。這個時候AStyle就能很好的解決這個問題。
對於我這樣的懶人來說,不用去管代碼縮進,將精力花在更重要的地方,就是一種減負。

3.2 SourceMonitor:識別壞味道

解決了代碼風格後,是否就可以算做漂亮的代碼了呢?
要知道再漂亮的衣服穿到胖子身上,也漂亮不到哪去(阿門,原諒我吧)。對於代碼來說,符合代碼風格只是第一步,漂亮的代碼還要易於理解。讓人容易理解的話,單個函數的代碼行就不能太長,嵌套層數就不能太多,分支條件判斷不能太多。這些工作不是代碼風格能解決的。我們需要能夠自動檢查代碼質量的工具-SourceMonitor。

SourceMonitor是一款代碼質量檢查的軟件。能夠檢查文件中函數的個數,每個函數的代碼行數,註釋比例,函數的調用深度,圈複雜度等。
其中需要最關鍵的是每個函數圈複雜度和每個函數的代碼行數。圈複雜度是指函數中可獨立執行的路徑,因此函數中每出現一次if/else/while,switch/case/break等,圈複雜度就加1.圈複雜度越高,說明函數中可執行的路徑越多,也就越複雜。超過一定值如(15或者10)以後就要考慮能否將函數重構了。此外一個函數的代碼行數如果太長,不能一屏顯示的話,不容易讓人記住和理解,也需要對該函數進行提煉。

3.3 Eclipse的半自動重構

利用SourceMonitor找出需要重構或提煉的函數後,難道又要我手工重構嗎,有沒有重構的工具呢?全自動的目前還沒見過,如果有同學見到,請留言。相比來說,半自動的重構工具還是比較多的,Eclipse中就有一個重構菜單,提供函數提煉,變量或方法重命名等不少基礎的重構功能。
Eclipse的半自動的重構能減少人工重構的錯誤,降低開發人員所耗費的精力,這也是爲什麼一個我作爲C/C++程序員越來越喜歡Eclipse的原因。

回到最開始的話題中,我覺得想罵孃的代碼無非有兩種,一種是難用,一種是難看。

代碼難用,這個問題比較深奧,本文沒有討論。
代碼難看,可以通過格式化使程序變得美觀,通過SourceMonitor識別代碼中的壞味道,利用Eclipse半自動重構等方式使程序變得已讀。
我相信,通過這樣處理後的代碼至少看上去是不會再被罵了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章