Space 與 tab 的爭論
阿恆
程式碼中究竟應該用 space 還是 tab 來縮排和對齊,可說是電腦科學界歷時最久,參與人數最多,爭論最激烈,但仍然沒有結論的話題。你只要在 Google 搜尋一下「space vs tab」,便可以感受到爭論是何等激烈。這裏我會分享我的方法,並盡可能解釋其中的原因和好處。
我同時使用 tab 和 space,縮排時用 tab,對齊時用 space。這種做法取得 tab 和 space 兩者的大部份好處,缺點不是沒有,但屬於可接受的範圍,此外,寫程式的風格也受到一定的限制,以下將一一說明。
使用 tab 縮排
Tab 的支持者最強而有力的論點就是編程人員可以隨個人喜好,隨意設定 tab 的大小,完全不需要改動程式碼。這對於有很多開發人員參與的大型專案尤其重要,即使你的程式只有你一個開發人員,難保將來不會由其他人來修改和維護,使用 space 來縮排等於強迫別人使用你喜愛的縮排深度,何必呢?這也是我使用 tab 來縮排的原因。
Space 的支持者對這一點的反駁,是在很多情況下單純使用 tab 不能把程式碼對齊,若果 tab 和 space 混合使用的話,由於不同的開發人員會設定不同的 tab 大小,程式碼看起來可能變得混亂不堪。這些情況包括:
-
把函式的參數一行一個列出來。
function connect(user, // username of the database passwd) // password of the user
|
|
-
需要對齊在程式碼右端的註釋。
$rawData = $imageFile.getAllContent(); // load the content of image $imageCount++; // update number of image echo “$imageCount images”; // report number of image imported
|
|
使用 space 對齊
當需要對齊程式碼右端的註釋時,使用 space 來對齊比 tab 更適合,這樣確保對於不同的 tab 大小,右端的註釋仍然對得整整齊齊,這亦是我解決上述第三種情況的方法。其他適用的場合包括對齊數個賦值語句:
|
|
其實前面提過的 elastic tabstops 能更漂亮底解決這個問題,但由於我使用的編輯器沒有這項功能,唯有繼續使用 space。
需要注意使用 space 來對齊是假設你的編輯器所用了 monospace 的字體,即使說所有字符,不論是英文字母、數字、還是 space 的寬度都是一樣。不過現在越來越多人使用 proportional space 的字體來編輯程式碼,貪其容易觀看和閱讀,也較不容易叫人疲倦,這種情況下使用 space 來對齊顯然會產生災難的後果,這又是 elastic tabstops 大顯神威的時候。