[工作][轉]C Java PHP Perl Python的程式代碼美化工具

寫本文的目的無非是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 ] <infile >outfile
  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嵌入式腳本語言
  
  而有些無法解析的錯誤其實是代碼不規範造成的。
  
  1. JAVASCRIPT中的”<“
  
  比如
  for (i = 1; i<a; i++)
  需要改成
  for (i = 1; i < a; i++)
  ^ ^ “<“前後需要加空格,否則HTMLTIDY會把<a當成HTML標記
  
  2. HTML屬性中包含JSP標記:
  
  對於一般的JSP屬性輸出TIDY是可以認出來的
  
  比如: <input type=text size=”9″ name=”alias” maxlength=20 value=<%=infoForm.getAlias()%> >
  但像這樣的代碼:
  <img border=0 src=/image/upload/content/<%=infoForm.getId()%><%=infoForm.getPhoto()%> width=120>
  由於屬性的開頭不是<%,因此會出現IMG沒有結尾錯誤
  
  3. HTMLTIDY缺省是將代碼完全補齊的,而實際上很多HTML代碼是在被包含文件中。而且HTMLTIDY對中文編碼得識別還有一定問題(目前只支援BIG5)
  
  原因:
  
  為什麼嵌入式代碼很難維護?畢竟針對不規範的HTML語法檢查器要比一個語言的解析器要複雜的多。舉例來說,比如針對這樣的代碼:
  <?php echo “<table>”;?>
  </table>
  
  這樣形式的代碼,美化工具必須同時懂得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.orgie
http://211.147.225.32/gate/big5/Linux.chinaitlab.com/Perl/26033.html

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: