編碼風格不是編碼規範

我並不認爲程序員是一個情緒特別豐富的羣體。但有一些事情卻能很容易刺激程序員的神經,那就是代碼格式和佈局。若是看到一個函數的括弧在同一行上沒有閉合,個人眼睛會噴血。若是看到有人沒有剛好的在兩個函數間留一空行,個人小腿會抽筋。但重點在這裏—— 除非是在家裏開發本身的業餘愛好軟件,個人這些我的喜愛實際上是可有可無的。一樣,做爲一個團隊中的一員,你的我的編程喜愛也應該放到一邊。  

編碼風格很容易會和編碼規範混爲一談,由於這兩個詞常常會被人換着使用。我認爲, 編碼規範同時包括了編碼風格和其它規範,不只僅指代碼格式。 例如,像「返回成功/失敗的函數應該用一個整數做爲返回值」,這樣的規則不屬於編碼風格。在這篇文章中,編碼風格簡單的指一個描述如何格式化代碼的說明。 編碼風格中的規則一般會涉及到下面這些主題:  

  • 縮進
  • 空格使用
  • Tab使用
  • 註釋
  • 命名習慣
  • 代碼行長度
  • 語言特色風格,例如是否使用無關緊要的分號
編碼風格都是爲特定的編程語言制定的,能夠把它們看做「咱們共同的約定」。若是在你的公司裏,在你在時,在這些事情正在制定完成,你能夠提出你的喜愛,那你是幸運。但一般狀況是,一種編碼風格在其生命期裏看着無數的程序員來了又走了。 在個人眼裏,遵照編碼風格有下面三個主要好處:  

1. 遵照編碼風格使代碼更容易維護  

今天由這個程序員實現的軟件,明天可能須要另一個程序員維護。若是全部代碼中你們使用同一種編碼風格,這另一個程序員快速的掃一眼陌生的代碼,就能根據你們約定的編程習慣,推斷出代碼的做用。若是編碼風格中指明常量應該全用大寫字母表示,那麼,當看到一個全是大寫字母的變量時,你就能推斷出它是常量。一樣的,若是編碼風格中規定包的引入要有順序,那你馬上就能知道去哪裏找這些包。這使得代碼很容易維護。 

2. 編碼風格使造成代碼集體全部制  

代碼集體全部制意味着全體程序員要負責全部代碼。集體全部制的做用很大,它能有效的增大 巴士因子 ——一個項目能承受多少個程序員被車撞了而不影響項目的正常進行。在整個代碼庫中堅持延用一種經常使用的編碼風格,因此程序員都能更容易的理解、維護。 

相反,若是在一個大型的軟件項目中,每一個程序員都使用本身的編碼風格,最終會引發一場維護版圖的戰爭,就像動物世界裏咱們的這些朋友: 

氣味記號(也稱噴灑尿液或領土記號)是動物標記本身領土範圍的一種行爲。一般是經過留下具備強烈氣味的物質來完成,不少時候是經過在領土中突出的物體上小便。- 維基百科  

我的編碼風格就像是狗撒尿,留下本身的勢力記號。 他們在代碼中留下本身的符號,在程序員之間創造壁壘。 

3. 編碼風格能消除那些長久的紛爭  

每一個程序員都對編碼風格有強烈的自我認同。這種感受深植於每一個人的自負中,每當和同事遇到是否應該在關鍵詞周圍使用空格時,這種討論很容易升級而僵持不下。可是,靜下來想一想——這真的無所謂。不論是不是在關鍵詞周圍使用了空格,只要能達成一致,你們都能從中得到易維護和集體全部制的好處。在這種狀況中,閉着眼睛,遵循一種編碼風格就好了。 

你不須要喜歡這種編碼風格。若是你不喜歡裏面的某條規定,那就罵幾句這個文檔,只向文檔發脾氣,就像人類遷怒於上帝。而後仍是按照約定作事。這樣作更具備建設性,比無休無止的吵論這些不重要的事情好的多。 

有了一套編碼風格並不必定會給你帶來好處——除非你們都遵照。 有些時候,你並不必定須要手工去調整代碼。不少的程序編程器,例如 Eclipse ,能配置幫你格式化代碼,使其符合編碼風格。即便你的編輯器沒有這種功能,不少其它工具也可以自動按照某種風格格式化一個文件。在咱們的團隊中,咱們使用  indent  和  uncrustify 工具。我還據說過一些其它好東西,好比 ReSharper 。那些不能被自動實施的規則,例如命名習慣,能夠在代碼審查的過程當中落實。 

你有什麼想法?大家團隊中採用了什麼標準和約定?它們帶來了什麼好處?請寫在評論裏。我會很高興看到討論。 

英文原文: The conventions we follow  / 譯: 外刊IT評論
相關文章
相關標籤/搜索