|
英文原文:The conventions we follow
我并不認為程序員是一個情緒特別豐富的群體。但有一些事情卻能很容易刺激程序員的神經,那就是代碼格式和布局(formatting and layout of code)。如果看到一個函數的括弧在同一行上沒有閉合,我的眼睛會噴血。如果看到有人沒有恰好的在兩個函數間留一空行,我的小腿會抽筋。但重點在這里——除非是在家里開發自己的業余愛好軟件,我的這些個人喜好其實是無關緊要的。同樣,作為一個團隊中的一員,你的個人編程喜好也應該放到一邊。
編碼風格(coding style)很容易會和編碼規范(coding standard)混為一談,因為這兩個詞經常會被人換著使用。我認為,編碼規范同時包括了編碼風格和其它規范,不僅僅指代碼格式。例如,像“返回成功/失敗的函數應該用一個整數作為返回值”,這樣的規則不屬于編碼風格。在這篇文章中,編碼風格簡單的指一個描述如何格式化代碼的說明。編碼風格中的規則通常會涉及到下面這些主題:
- 縮進
- 空格的使用
- Tab的使用
- 注釋
- 命名習慣
- 代碼行長度
- 語言特點風格,例如是否使用可有可無的分號。
編碼風格都是為特定的編程語言制定的,可以把它們看作“我們共同的約定”。如果在你的公司里,在你在時,在這些事情正在制定完成,你可以提出你的喜好,那你是幸運。但通常情況是,一種編碼風格在其生命期里看著無數的程序員來了又走了。在我的眼里,遵守編碼風格有下面三個主要好處:
1. 遵守編碼風格使代碼更容易維護
今天由這個程序員實現的軟件,明天可能需要另外一個程序員維護。如果所有代碼中大家使用同一種編碼風格,這另外一個程序員快速的掃一眼陌生的代碼,就能根據大家約定的編程習慣,推斷出代碼的作用。如果編碼風格中指明常量應該全用大寫字母表示,那么,當看到一個全是大寫字母的變量時,你就能推斷出它是常量。同樣的,如果編碼風格中規定包的引入要有順序,那你立刻就能知道去哪里找這些包。這使得代碼很容易維護。
2. 編碼風格使形成代碼集體所有制
代碼集體所有制意味著全體程序員要負責所有代碼。集體所有制的作用很大,它能有效的增大巴士因子——一個項目能承受多少個程序員被車撞了而不影響項目的正常進行。在整個代碼庫中堅持延用一種常用的編碼風格,所以程序員都能更容易的理解、維護。
相反,如果在一個大型的軟件項目中,每個程序員都使用自己的編碼風格,最終會引起一場維護版圖的戰爭,就像動物世界里我們的這些朋友:
氣味記號(也稱噴灑尿液或領土記號)是動物標記自己領土范圍的一種行為。通常是通過留下具有強烈氣味的物質來完成,很多時候是通過在領土中突出的物體上小便。- 維基百科
個人編碼風格就像是狗撒尿,留下自己的勢力記號。他們在代碼中留下自己的符號,在程序員之間創造壁壘。
3. 編碼風格能消除那些長久的紛爭
每個程序員都對編碼風格有強烈的自我認同。這種感覺深植于每個人的自負中,每當和同事遇到是否應該在關鍵詞周圍使用空格時,這種討論很容易升級而僵持不下。但是,靜下來想想——這真的無所謂。不管是不是在關鍵詞周圍使用了空格,只要能達成一致,大家都能從中獲得易維護和集體所有制的好處。在這種情況中,閉著眼睛,遵循一種編碼風格就行了。
你不需要喜歡這種編碼風格。如果你不喜歡里面的某條規定,那就罵幾句這個文檔,只向文檔發脾氣,就像人類遷怒于上帝。然后還是按照約定做事。這樣做更具有建設性,比無休無止的吵論這些不重要的事情好的多。
有了一套編碼風格并不一定會給你帶來好處——除非大家都遵守。有些時候,你并不一定需要手工去調整代碼。很多的程序編程器,例如Eclipse,能配置幫你格式化代碼,使其符合編碼風格。即使你的編輯器沒有這種功能,很多其它工具也能夠自動按照某種風格格式化一個文件。在我們的團隊中,我們使用 indent 和 uncrustify 工具。我還聽說過一些其它好東西,比如ReSharper。那些不能被自動實施的規則,例如命名習慣,可以在代碼審查的過程中落實。
it知識庫:編碼風格不是編碼規范,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。