Tab 和 Space,用哪個縮排比較好?

space or tab @ silicon valley

三不五時會聽到有人在吵這個。這邊記錄一下我的看法。

先說結論

其實沒有誰比較好,但在當下決定要用哪個時,我覺得至少要經過這些判斷:

  1. 正在修改的檔案用什麼,就用什麼;如果兩者同時存在,那該份程式就有問題,用什麼都一樣
  2. 專案規定用什麼,就用什麼;如果沒好好規範導致混雜著亂用,那專案就有問題,用什麼都一樣
  3. 如果是全新的專案,那想用什麼就用什麼,只要一致就好

簡單說,在混亂中求秩序沒有意義,寫程式的時候要以好維護、好閱讀為前提,私人偏好什麼的都是可以退讓的,不以解決問題為首要目標、反而製造問題的人不配稱為工程師。

一份程式如果讓一個團隊寫得像是同一個人寫的,那這個團隊就成功一半了。

善用工具: editorconfig

身為資訊專業背景的人,規範這種事情當然是直接自動化,以避免消耗精神力。

有群人就弄了個 editorconfig,這個支援超多編輯器的外掛讓你可以進行「專案下符合某些規則的檔案就用什麼縮排」的設定:像是 Makefile 就用 Tab 縮排,config files 和 ventor 下都用兩格,其他都用四個空格等等。甚至連換行符、編碼他都有一起處理,有興趣可以細細研究: editorconfig.org

有了這個就不用再按 n 次空格去縮排了,輕巧地按下 tab 鍵就好,剩下的都讓裝著 editorconfig 的編輯器替你處理好。

我自己的話

真的要說的話,我可能稍微偏 Tab 一點。原因有二:

  1. 因為平常用 space 的地方已經很多了,都不使用 Tab 的話他有點可憐,有了按鍵就要按他啊!XD
  2. Tab 的寬度可以自己根據編輯器去做調整,大家都用一樣的 tab 縮排,但我們可以做到我們同時都看得舒服。

不過這是指縮排程式的部分。至於要讓文字對齊,還是要用 spaces 比較好,不然 ANSII art 就會變得很詭異。

參考連結

或許你想說說