首頁»WEB綜合»編碼風格不是編碼規范

編碼風格不是編碼規范

來源:aqee 發布時間:2013-07-01 閱讀次數:

  我并不認為程序員是一個情緒特別豐富的群體。但有一些事情卻能很容易刺激程序員的神經,那就是代碼格式和布局。如果看到一個函數的括弧在同一行上沒有閉合,我的眼睛會噴血。如果看到有人沒有恰好的在兩個函數間留一空行,我的小腿會抽筋。但重點在這里——除非是在家里開發自己的業余愛好軟件,我的這些個人喜好其實是無關緊要的。同樣,作為一個團隊中的一員,你的個人編程喜好也應該放到一邊。

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

  • 縮進
  • 空格使用
  • Tab使用
  • 注釋
  • 命名習慣
  • 代碼行長度
  • 語言特點風格,例如是否使用可有可無的分號

  編碼風格都是為特定的編程語言制定的,可以把它們看作“我們共同的約定”。如果在你的公司里,在你在時,在這些事情正在制定完成,你可以提出你的喜好,那你是幸運。但通常情況是,一種編碼風格在其生命期里看著無數的程序員來了又走了。在我的眼里,遵守編碼風格有下面三個主要好處:

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

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

  2. 編碼風格使形成代碼集體所有制

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

  相反,如果在一個大型的軟件項目中,每個程序員都使用自己的編碼風格,最終會引起一場維護版圖的戰爭,就像動物世界里我們的這些朋友:

氣味記號(也稱噴灑尿液或領土記號)是動物標記自己領土范圍的一種行為。通常是通過留下具有強烈氣味的物質來完成,很多時候是通過在領土中突出的物體上小便。-維基百科

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

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

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

  你不需要喜歡這種編碼風格。如果你不喜歡里面的某條規定,那就罵幾句這個文檔,只向文檔發脾氣,就像人類遷怒于上帝。然后還是按照約定做事。這樣做更具有建設性,比無休無止的吵論這些不重要的事情好的多。

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

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

  英文原文:The conventions we follow

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
大发国际网址 荆州市| 理塘县| 理塘县| 赤城县| 重庆市| 准格尔旗| 抚远县| 永德县| 临湘市| 鄢陵县| 江川县| 阿拉善右旗| 商洛市| 闽清县| 眉山市| 成武县| 阳信县| 沭阳县| 柏乡县| 江口县| 台北县| 桑植县| 新建县| 崇文区| 鄢陵县| 娱乐| 满城县| 久治县| 防城港市| 太保市| 宁波市| 江陵县| 沈丘县| 新丰县| 青海省| 米脂县| 射阳县| 余江县| 上饶市| 伊通| 邢台市| 孝义市| 鞍山市| 卓资县| 定安县| 金阳县| 正宁县| 隆林| 额济纳旗| 万荣县| 岗巴县| 静安区| 昌乐县| 平利县| 清流县| 大厂| 聂荣县| 莫力| 来安县| 东台市| 大埔县| 灵宝市| 阳春市| 绩溪县| 闻喜县| 当涂县| 南宁市| 田阳县| 乳山市| 尼木县| 平远县| 兴城市| 宝坻区| 鹤壁市| 宁南县| 汉川市| 肥东县| 琼结县| 沙雅县| 石景山区| 东乡族自治县| 新蔡县| 平乐县| 辽宁省| 临西县| 鄂伦春自治旗| 明水县| 漳州市| 邯郸县| 贡觉县| 南涧| 左云县| 涿鹿县| 岳阳市| 双柏县| 武鸣县| 阳高县| 靖远县| 海晏县| 长顺县| 苍山县| 安溪县| 绍兴县| 正蓝旗| 乐清市| 铜梁县| 偃师市| 高州市| 旬阳县| 新民市| 眉山市| 南昌县| 铜鼓县| 慈溪市| 万州区| 寻乌县| 延津县| 石泉县| 如东县| 修水县| 龙口市| 河源市| 仙游县| 屏南县| 育儿| 河北区| 平泉县| 台湾省| 嘉定区| 洛阳市| 绥江县| 饶河县| 张家港市| 昌吉市| 三门县| 凤城市| 铁岭县|