使用一致的代碼美化工具(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代碼)。 |
| pydent |
python |
pythius包含了2個工具:一個就是縮排整理 pydent: 代碼縮排工具 pystat: 代碼統計工具 |
下載原始碼解包後: Run "python setup.py build" Run "python setup.py install" |
| htmltidy |
html/xml |
HTML代碼的錯誤修正工具,可以協助你的HTML代碼更好的符合W3C規範,頁面中如果包含ASP PHP JSP等程式,HTMLTIDY都會盡量忽略。 HTMLTIDY也支援對XML的格式美化 使用選項:-xml |
下載原始碼後 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”檔案中 |
代碼的批量修改:
WIN32:
for /R %f in (*.java) do astyle --style=java --brackets=break-closing-headers %f
for /R %f in (*.jsp) do tidy -raw -imuq -wrap 132 -f %f.err %f
Linux:
find ./ -name *.java -exec astyle --style=java --brackets=break-closing-headers {} /;
HTMLTIDY的錯誤警告:有些無法解析的錯誤其實是代碼不規範造成的。
- JAVASCRIPT中的"<"
比如
for (i = 1; i<m; i++)
需要改成
for (i = 1; i < m; i++)
^ ^ "<"前後需要加空格,防止把<m當成HTML標記
- 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沒有結尾錯誤
HTMLTIDY同時也支援XML的格式美化:
tidy -xml -imq web.xml
tidy -xml -imq build.xml
程式員應該是善於溝通的,代碼美化的意義在於體現了開發人員對他人的尊重,從而讓程式員之間更好的溝通。有統計表明一個縮排良好的代碼可以大大提高代碼閱讀的速度40%,另一個統計是軟體開發工作的70%以上是維護前人的代碼,因此代碼美化工具的使用也是降低軟體維護成本的一個途徑。
以上工具只是代碼格式縮排的美化,遵守完整的代碼規範可以參考以下文檔:
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/