導讀:
程式員應該是善於溝通的,代碼美化的意義在於體現了開發人員對他人的尊重,使用好的編碼約定可以使原始碼明白、易讀、準確,更加直觀且與其他語言約定保持一致,從而讓程式員之間更好的溝通。
有統計表明縮排良好的代碼可以提高代碼閱讀的效率40%以上,而另一個統計是軟體開發工作的70%以上是維護前人的代碼,因此對以往代碼的格式美化往往也是系統重構(refactoring)的第一步。代碼美化工具(pretty print program)的使用可以使基本的代碼縮排規範成為一種更容易執行的制度。
另外,如果作為部門代碼規範的制訂者也應該瞭解程式員不是機器,寫代碼時完全不犯代碼縮排錯誤幾乎是不可能的。基於工具的批量格式化和整理工具方便的配置匯入/匯出機制制定統一的縮排規範才是一個真正有可操作性的制度。
幾種開放原始碼的代碼美化工具的介紹
工具名稱適用語言簡介安裝/使用
cindent就是代碼美化工具的代名詞indent是gcc附帶的一個標準工具,
indent [options] [input-files]
indent [options] [single-input-file] [-o output-file]
perlperltidy本身也是用perl寫的下載後: perl Makefile.PL;make;make install
perltidy [ options ] file1 file2 file3 ...
(output goes to file1.tdy, file2.tdy, file3.tdy, ...)
perltidy [ options ] file1 -o outfile
perltidy [ options ] file1 -st >outfile
perltidy [ options ] outfile
c c++ java (php)一個速度很快的C/C++/Java原始碼美化工具。
astyle比indent好在有很多成套的的風格定義:ansi java linux...不必記住複雜的縮排具體選項。
下載原始碼解包後,make, 產生astyle可執行檔
astyle [options] Beautified
astyle [options] Foo.cpp Bar.cpp [...]
astyle --style=ansi *.cpp
我嘗試過用它來格式化PHP程式也很有效(當然是不合HTML代碼混在一起的純PHP代碼)。
java功能強大的JAVA代碼格式化工具,除了標準介面外,命令列工具,還可作為ANT JBUILDER ECLIPSE JDEVELOPER等工具的外掛程式使用,並提供API從http://prdownloads.sourceforge.net/jalopy/下載
並參考相應安裝文檔
pythonpythius包含了2個工具:
pydent: 代碼縮排工具
pystat: 代碼統計工具
下載原始碼解包後:
Run "python setup.py build"
Run "python setup.py install"
html/xmlHTML代碼的錯誤修正工具,可以協助你的HTML代碼更好的符合W3C規範,現在被稱作tidy,因為它不僅只使用於HTML,也現在也適用於XHTML XML的格式化。
但JSP不適合ASP PHP JSP等嵌入式指令碼的代碼美化
下載原始碼後 make 產生tidy可執行檔:
tidy file1 file2 ...
注意:對於含有中文的頁面要使用 -raw選項
tidy.exe -raw -imuq -wrap 132 -f %f.err %f
選項說明:
-raw: 不修改中文字元 (output values above 127 without conversion to entities)
-i indend 預設HTML按2個空格縮排
-m 覆蓋原檔案
-u 強制所有HTML標記大寫(這個可以不加)
-wrap 頁面代碼寬度大於132行強制換行
-f %f.err 將錯誤輸出到“相應檔案名稱.err”檔案中
HTMLTIDY支援XML的格式美化:
tidy -xml -imq web.xml
tidy -xml -imq build.xml
其他工具介紹:
php代碼美化工具
phpCB: php code beautifier 有命令列版本,也有圖形介面的代碼查看器。
http://www.phpedit.net/products/phpCodeBeautifier/
Java的代碼美化工具
如果是專門針對JAVA代碼的格式化,Jacobe也是很好的選擇,它預設包含了一個完全按照SUN的代碼規範的格式化設定檔。而且甚至有JIndent這種商業化代碼整理工具以獲得更好的效果。
ImportScrbber: java import聲明的整理工具,能夠將import java.util.*這樣的引用變成單條的引用,並且協助刪除已經不再需要的引用。 http://importscrubber.sourceforge.net/
介紹這些工具的都可以在這裡可以找到:Jacobe Jindent Jxbeautifier...
http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Code_Beautifiers/
使用命令列工具實現代碼的批量修改
Windows 2000下:用for命令實現目錄遍曆和檔案過濾及命令執行,例如:
for /R %f in (*.java) do astyle --style=java %f
for /R %f in (*.htm*) do tidy -raw -imq -wrap 132 -f %f.err %f
for /R %f in (*.asp) do vbsbeaut.exe -i -s4 %f
Linux:用find -exec 遍曆執行,例如:
find ./ -name *.java -exec astyle --style=ansi {} /;
因此不要被很多商業化軟體漂亮的圖形介面所迷惑,當面對上千個源檔案時,能夠基於命令列的大量操作也是一個非常重要的功能。
針對Eclipse等IDE開發環境的工具外掛程式使用
越來越多的IDE開發環境都包含了代碼美化功能,但有些仍不如這些專門的工具強大,而且如果開發人員中有的用Eclipse,有的是JBuilder的忠實使用者,如何讓他們都能方便的遵守代碼規範呢?答案就是用全Jalopy針對這些主流IDE開發環境的外掛程式。
Jalopy: Java代碼美化工具: http://jalopy.sourceforge.net/
Eclipse plug-in: http://jalopy.sourceforge.net/plugin-eclipse.html
CheckStyle: Java代碼代碼規範(縮排,命名)檢查工具 http://checkstyle.sourceforge.net
Eclipse plug-in: Eclipse Checkstyle Plug-in
安裝:
作為Eclipse的外掛程式安裝都非常方便,下載後解包到Eclipse/plug-in/目錄下重啟Eclipse即可:
配置:
Jalopy: Windows ==> Jalopy Preference 配置的匯入/匯出在General選單中,
CheckStyle: Windows ==> perference ==> checkstyle 配置的匯入/匯出就在配置介面右側
標準配置的匯入/匯出功能可以大大降低開發人員針對以上工具的學習時間,對於大部分開發人員來說不需要詳細瞭解其中所有的選項配置,只要知道將標準配置匯入就可以了。我常用的Jalopy設定檔
使用:
Jalopy: 在代碼編輯介面點右鍵的選單中除了原有的Format選項外,還多出了Format with Jalopy選項,而Eclipse自身帶有的Source=>Orgenize Imports也是能夠達到Imports Srubber同樣的功效。
CheckStyle是一個非常複雜的代碼風格檢查過程:包括縮排,命名規範等,因此預設是Disable的,啟動針對一個項目的CheckStyle需要在點:項目的properties==>CheckStyle==>Enable。
而且以上這些工具都包含了針對ant的擴充,可以方便的加入到ant指令碼中進行自動的代碼整理/統計。
參考資料:
GNU Coding Standards
http://www.gnu.org/prep/standards_toc.html
Code Conventions for the Java(TM) Programming Languagehttp://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
PHP Coding Standard
http://alltasks.net/code/php_coding_standard.html
pb: Perl/Javascript Beautifier
http://www.arachnoid.com/lutusp/ftp/cgi/pb.txt
HTML XML XHTML CSS...
http://www.w3c.org
C-C++ Beautifier HOW-TO:
http://www.tldp.org/HOWTO/C-C++Beautifier-HOWTO/
VBSBeaut代碼整理工具
http://www.daansystems.com/vbsbeaut/
Java組件之間的依賴度分析
http://www.clarkware.com/software/JDepend.html
附:為什麼HTMLTIDY的不適合重新格式化JSP PHP ASP等HTML嵌入式指令碼語言
而有些無法解析的錯誤其實是代碼不規範造成的。
JAVASCRIPT中的"
for (i = 1; i
需要改成
for (i = 1; i
^ ^ "
HTML 屬性中包含JSP標記: 對於一般的JSP屬性輸出TIDY是可以認出來的
比如:
但像這樣的代碼:
width=120>
由於屬性的開頭不是
HTMLTIDY預設是將代碼完全補齊的,而實際上很多HTML代碼是在被包含檔案中。而且HTMLTIDY對中文編碼得識別還有一定問題(目前只支援BIG5)
原因:
為什麼嵌入式代碼很難維護?畢竟針對不規範的HTML語法檢查器要比一個語言的解析器要複雜的多。舉例來說,比如針對這樣的代碼:
這樣形式的代碼,美化工具必須同時懂得HTML文法和PHP文法才行,所以大部分格式工具都是針對一種語言,或者針對嵌入指令碼的程式部分的格式化,或者只對針對純HTML格式化。只有少數Virsual Age, Forte等大型開發工具裡包含了JSP的代碼美化,另外就是SLICKEDIT這種大型商業文字編輯器等。
解決:對於包含程式的JSP ASP等檔案的HTML部分的格式美化最好還是使用專門的HTML編輯工具Dreamweaver(≥4)和Frontpage(≥2000)中的格式化工具來實現。比如:對於FRONTPAGE從菜單的工具==>網頁選項==>HTML原始碼選單裡選擇“使用下面的規則重新格式化原始碼”。
總之,使用HTML和程式在一起的嵌入式指令碼語言本身就是一件非常不好的開發習慣。從長遠來開用XML/XSLT等技術實現資料/表現/邏輯的分離是一種更適合大規模開發的模式。
為了目前大量的ASP PHP JSP應用我還是通過Google上找到一些工具,相信HOMESITE等。其實前面提到的VBSBeautifier其實也是調用Perl5.8在Windows上的
一個用於ASP的代碼美化工具:VbsBeaut
http://www.daansystems.com/vbsbeaut/
一個基於Java的HTML編輯器,內嵌了C C++ Java JavaScript Perl等類C語言的代碼美化器:http://www.arachnoid.com/arachnophilia/index.htmlBeautifier highlights and indents source code using highlight configuration files (which are similar to Ultraedit highlighting files). As such, it supports C, C#, Java, Perl, PHP, Pascal, Lisp, Mumps, Eiffel, Euphoria, and x86 Assembler, amongst others.
http://www.beautifier.org/
Trita is a source code beautifier which learns your personal formatting style by examining examples of your code.
http://www.trita.com/
支援:Java, Javscript, CSS, JSP, HTML, ASP, Lisp, Delphi, C#, C++, PHP, Perl, Python, and SQL.
本文轉自
http://www.chedong.com/tech/indent_tools.html