一提到編碼風格時,往往也會引起腥風血雨
比如:
JavaScript 語句後面應該加分號嗎? 縮排應該用 Tab、四空格還是兩空格? 變數應該統一提前宣告好還是就近宣告? 變數名應該用駝峰風格還是下劃線風格? 註釋應該採用 JSDoc 風格還是 Markdown 風格? 私有屬性約定用下劃線開頭嗎? 函式最好不要超過多少行? ……
這類問題不僅在程式設計師中普遍存在,文字工作者也常常糾結:
中英文混排時,中文與英文之間應該加空格嗎? 中英文混排時,英文字母后面應該用全形還是半形標點符號? 段落前面真有必要空兩格嗎? 引號是否應該用 『』和「」? 破折號是一槓還是兩槓? 例如、參考等詞彙後,究竟需不需要加冒號? ……
風格
我們日常說的編碼規範,經常指的是 Style Guide,正確的翻譯是編碼風格。
既然是風格,就沒有對錯。就如現實生活中,我們每個人都有自己的穿著打扮一樣。可能有些人打扮土一點,但土就土,並不影響什麼。
很有意思的是,風格也沒有孰優孰劣。比如郭敬明的打扮,很多人很喜歡,會為其尖叫為其瘋狂。但在我看來,郭敬明的相貌讓我非常討厭,這還是男人嗎?太銼啦。
別去爭辯,喜歡和對錯無關,風格亦無高低之別。
編碼風格如此,文字排版風格也是一樣。
規範
風格之外,也有規範。比如穿著打扮,光怪陸離都沒問題,但在公眾場合不能不穿。規範經常很少很少,但的的確確存在。
對於 JavaScript 語言來說,通用的編碼規範基本沒有,有的話只有一條:要能執行。除此之外,還會有一些:
JavaScript 檔案的編碼必須是 UTF-8 。 JavaScript 中不能出現 URL 硬編碼。 …… 以上規範都是針對具體公司具體場景下的要求,除了以上這些規範,其他都是編碼風格問題。
社會中的規範,是為了維護基本秩序和道德底線。編碼規範,則是為了避免錯誤。
態度
程式設計師經常有個壞習慣:拿到別人的程式碼,喜歡首先按照自己的風格格式化一下。
好的習慣是這樣的:
給他人的開源專案提交補丁也是一樣:儘可能多地做足功課,弄清楚該專案使用的程式碼風格和測試集的組織,甚至是 git 提交日誌的書面格式,儘量讓我寫的東西酷似專案作者本人寫出的東西,這樣可以節約對方的時間,是對他的最大尊重。
這就如我們去朋友家裡做客,你可能會很不喜歡朋友家裡的裝修風格,但你最好不要自帶顏料桶去幫朋友重新裝修。道理不用多說,對他人的風格我們要懂得尊重,無論是在現實生活中,還是在寫程式碼時。
當然,認可的規範還是得遵守。比如別在公共場合裸奔,別在一個 UTF-8 團隊把檔案存成 GBK 編碼。
對待規範,要嚴格遵守。對待風格,要懂得尊重。
關鍵
一旦你擁有了開放的心態,一旦你開始懂得去欣賞他人的風格,你會發現世界是五彩繽紛的,你會開始越過一些表象,關注起一些真正值得關注的。
比如一個長得很醜的人,當你不再去看外表時,你會發現某些情況下醜人是會發光的,那種光十分漂亮,比很多帥哥漂亮百倍千倍。你會開始懂得生活,懂得真愛。
編碼也如此。不再去糾結四空格還是兩空格後,你會看到
程式碼的邏輯抽象是否正確? 程式碼背後的資料模型是否可以優化? 這段程式碼是否應該放在這個檔案裡? 這個模組的職責是否過大? 這個設計模式是否用得太僵硬? 某個功能點是否應該用 CSS 而不是 JS 來實現? 這段程式碼是否忘了寫單元測試? …… 一旦你開始能從他人的程式碼中,去糾結以上各種問題而不是程式碼風格時,你的功力經常就會大增。牛逼的程式設計師有個不怎麼對外說的祕密:
去更多地看程式碼,看優秀的程式碼。迫不得已才自己去寫少量程式碼。
最後
程式碼如人,風格的差異很正常,彼此尊重。相愛是靈魂的碰觸,別停留在表象。