談談編碼風格與規範

前端啟航發表於2018-10-26

一提到編碼風格時,往往也會引起腥風血雨

比如:

JavaScript 語句後面應該加分號嗎? 縮排應該用 Tab、四空格還是兩空格? 變數應該統一提前宣告好還是就近宣告? 變數名應該用駝峰風格還是下劃線風格? 註釋應該採用 JSDoc 風格還是 Markdown 風格? 私有屬性約定用下劃線開頭嗎? 函式最好不要超過多少行? ……

這類問題不僅在程式設計師中普遍存在,文字工作者也常常糾結:

中英文混排時,中文與英文之間應該加空格嗎? 中英文混排時,英文字母后面應該用全形還是半形標點符號? 段落前面真有必要空兩格嗎? 引號是否應該用 『』和「」? 破折號是一槓還是兩槓? 例如、參考等詞彙後,究竟需不需要加冒號? ……

風格

我們日常說的編碼規範,經常指的是 Style Guide,正確的翻譯是編碼風格。

既然是風格,就沒有對錯。就如現實生活中,我們每個人都有自己的穿著打扮一樣。可能有些人打扮土一點,但土就土,並不影響什麼。

很有意思的是,風格也沒有孰優孰劣。比如郭敬明的打扮,很多人很喜歡,會為其尖叫為其瘋狂。但在我看來,郭敬明的相貌讓我非常討厭,這還是男人嗎?太銼啦。

別去爭辯,喜歡和對錯無關,風格亦無高低之別。

編碼風格如此,文字排版風格也是一樣。

規範

風格之外,也有規範。比如穿著打扮,光怪陸離都沒問題,但在公眾場合不能不穿。規範經常很少很少,但的的確確存在。

對於 JavaScript 語言來說,通用的編碼規範基本沒有,有的話只有一條:要能執行。除此之外,還會有一些:

JavaScript 檔案的編碼必須是 UTF-8 。 JavaScript 中不能出現 URL 硬編碼。 …… 以上規範都是針對具體公司具體場景下的要求,除了以上這些規範,其他都是編碼風格問題。

社會中的規範,是為了維護基本秩序和道德底線。編碼規範,則是為了避免錯誤。

態度

程式設計師經常有個壞習慣:拿到別人的程式碼,喜歡首先按照自己的風格格式化一下。

好的習慣是這樣的:

給他人的開源專案提交補丁也是一樣:儘可能多地做足功課,弄清楚該專案使用的程式碼風格和測試集的組織,甚至是 git 提交日誌的書面格式,儘量讓我寫的東西酷似專案作者本人寫出的東西,這樣可以節約對方的時間,是對他的最大尊重。

這就如我們去朋友家裡做客,你可能會很不喜歡朋友家裡的裝修風格,但你最好不要自帶顏料桶去幫朋友重新裝修。道理不用多說,對他人的風格我們要懂得尊重,無論是在現實生活中,還是在寫程式碼時。

當然,認可的規範還是得遵守。比如別在公共場合裸奔,別在一個 UTF-8 團隊把檔案存成 GBK 編碼。

對待規範,要嚴格遵守。對待風格,要懂得尊重。

關鍵

一旦你擁有了開放的心態,一旦你開始懂得去欣賞他人的風格,你會發現世界是五彩繽紛的,你會開始越過一些表象,關注起一些真正值得關注的。

比如一個長得很醜的人,當你不再去看外表時,你會發現某些情況下醜人是會發光的,那種光十分漂亮,比很多帥哥漂亮百倍千倍。你會開始懂得生活,懂得真愛。

編碼也如此。不再去糾結四空格還是兩空格後,你會看到

程式碼的邏輯抽象是否正確? 程式碼背後的資料模型是否可以優化? 這段程式碼是否應該放在這個檔案裡? 這個模組的職責是否過大? 這個設計模式是否用得太僵硬? 某個功能點是否應該用 CSS 而不是 JS 來實現? 這段程式碼是否忘了寫單元測試? …… 一旦你開始能從他人的程式碼中,去糾結以上各種問題而不是程式碼風格時,你的功力經常就會大增。牛逼的程式設計師有個不怎麼對外說的祕密:

去更多地看程式碼,看優秀的程式碼。迫不得已才自己去寫少量程式碼。

最後

程式碼如人,風格的差異很正常,彼此尊重。相愛是靈魂的碰觸,別停留在表象。

相關文章