作者: 車東 chedong@bigfoot.com
最後更新:2002-12-28 23:24:31
版權聲明:可以任意轉載,轉載時請務必標明原始出處和作者信息
關鍵詞:pretty print indent perltidy pydent astyle htmltidy source code
beautifier
內容摘要:寫本文的目的無非是2個,首先,以前程序員縮進非常不整齊的代碼非常影響我的代碼閱讀速度。第二,我希望新的代碼(無論在什麼編輯環境下編寫)都能夠非常好的適應公司的縮進規範,便於程序員之間的交流。
當然:如果馬上能從以下列表中找到你需要的就完全不必耐心的看到最後:相應工具中的文檔會有更詳細的使用說明
c, c++ c# ==> indent astyle
java ==> astyle jalopy Jacobe ImportScrbber
php ==> phpCodeBeautifier
perl ==> perltidy
python ==> pydent
程序員應該是善於溝通的,代碼美化的意義在於體現了開發者對他人的尊重,使用好的編碼約定可以使源代碼明白、易讀、準確,更加直觀且與其他語言約定保持一致,從而讓程序員之間更好的溝通。
有統計表明縮進良好的代碼可以提高代碼閱讀的效率40%以上,而另一個統計是軟體開發工作的70%以上是維護前人的代碼,因此對以往代碼的格式美化往往也是系統重構(refactoring)的第一步。代碼美化工具(pretty
print program)的使用可以使基本的代碼縮進規範成為一種更容易執行的制度。
另外,如果作為部門代碼規範的制訂者也應該了解程序員不是機器,寫代碼時完全不犯代碼縮進錯誤幾乎是不可能的,另外,程序員真的不按照規範做你又能怎麼辦呢?所以按工具的格式化能力制定的縮進規範是一個真正有可操作性的制度。
幾種開放源代碼的代碼美化工具的介紹
工具名稱 | 適用語言 | 簡介 | 安裝/使用 |
indent | c | indent幾乎成為代碼美化工具的代名詞 | indent是gcc附帶的一個標準工具, indent [options] [input-files] indent [options] [single-input-file] [-o output-file] |
perltidy | perl | perltidy本身也是用perl寫的 | 下載后直接運行perltidy腳本 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 ] |
astyle | c c++ java (php) | 一個速度很快的C/C++/Java源代碼美化工具。 astyle比indent好在有很多成套的的風格定義:ansi java linux...不必記住複雜的縮進具體選項。 | 下載源代碼解包后,make, 生成astyle可執行文件 astyle [options] < Original > Beautified astyle [options] Foo.cpp Bar.cpp [...] astyle --style=ansi *.cpp 我嘗試過用它來格式化PHP程序也很有效(當然是不合HTML代碼混在一起的純PHP代碼)。 |
jalopy | java | 功能強大的JAVA代碼格式化工具,除了標準界面外,命令行工具,還可作為ANT JBUILDER ECLIPSE JDEVELOPER等工具的插件使用,並提供API | 從http://prdownloads.sourceforge.net/jalopy/下載 並參考相應安裝文檔 |
pydent | python | pythius包含了2個工具: pydent: 代碼縮進工具 pystat: 代碼統計工具 | 下載源代碼解包后: Run "python setup.py build" Run "python setup.py install" |
htmltidy | html/xml | HTML代碼的糾錯工具,可以幫助你的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://tools.phpedit.net/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/
使用命令行工具實現代碼的批量修改
WIN2000下:用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
Linux:用find -exec 遍歷執行,例如:
find ./ -name *.java -exec astyle --style=ansi {} \;
因此,是否有命令行工具也往往成為選擇代碼美化工具的指標之一,很多商業化的軟體只採用圖形界面,反而不適合代碼的批量修改。
為什麼HTMLTIDY的不適合重新格式化JSP PHP ASP等HTML嵌入式腳本語言
而有些無法解析的錯誤其實是代碼不規範造成的。
比如
for (i = 1; i需要改成
for (i = 1; i < a; i++)
^ ^ "<"前後需要加空格,否則HTMLTIDY會把
對於一般的JSP屬性輸出TIDY是可以認出來的
比如: >
但像這樣的代碼:
<%=infoForm.getPhoto()%> width=120>
由於屬性的開頭不是<%,因此會出現IMG沒有結尾錯誤
原因:
為什麼嵌入式代碼很難維護?畢竟針對不規範的HTML語法檢查器要比一個語言的解析器要複雜的多。舉例來說,比如針對這樣的代碼:
";?>
這樣形式的代碼,美化工具必須同時懂得HTML語法和PHP語法才行,所以大部分格式工具都是針對一種語言,或者針對嵌入腳本的程序部分的格式化,或者只對針對純HTML格式化。只有少數Virsual
Age, Forte等大型開發工具里包含了JSP的代碼美化,另外就是SLICKEDIT這種大型商業文本編輯器等。
解決:對於包含程序的JSP ASP等文件的HTML部分的格式美化最好還是使用專門的HTML編輯工具Dreamwaver(≥4)和Frontpage(≥2000)中的格式化工具來實現。比如:對於FRONTPAGE從菜單的工具==>網頁選項==>HTML源代碼選單里選擇「使用下面的規則重新格式化源代碼」。
總之,使用HTML和程序在一起的嵌入式腳本語言本身就是一件非常不好的開發習慣。從長遠來開用XML/XSLT等技術實現數據/表現/邏輯的分離是一種更適合大規模開發的模式。
以上工具只是代碼格式縮進的美化,而遵守完整的代碼規範可以參考以下文檔:
GNU Coding Standards
http://www.gnu.org/prep/standards_toc.html
Code Conventions for the Java(TM) Programming Language
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
PHP Coding Standard
http://utvikler.start.no/code/php_coding_standard.html
perlstyle
http://www.perldoc.com/perl5.6/pod/perlstyle.html
HTML XML XHTML CSS...
http://www.w3c.org
<<返回
[火星人 ] c java php perl python 的程序代碼美化工具已經有1061次圍觀