編碼風格不是編碼規範

2020-12-15 開源中國

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關焦點

  • PHP編碼風格規範詳細介紹
    -2已經定義了在PHP編碼中的一些規範,只要我們好好遵守這些規範,即使是使用靈活的腳本語言,也能寫出非常漂亮工整的代碼。首先我們來看一下已經通過的PSR規範,然後大致講解一下PSR-1和PSR-2規範的一些具體要求。已通過的PSRPSR-1基礎編碼規範1、開閉標籤首先,PHP代碼必須以<?php或<?=標籤開始。
  • Python編碼規範匯總
    文章目錄編碼格式聲明縮進引號空行導入模塊命名規範編碼格式聲明通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字符,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的縮進統一使用 4 個空格進行縮進。絕對不要用tab, 也不要tab和空格混用。對於行連接的情況,我一般使用4空格的懸掛式縮進。
  • 我的 Python 編碼規範
    解釋器聲明編碼格式聲明模塊注釋或文檔字符串模塊導入常量和全局變量聲明頂級定義(函數或類定義)執行代碼編碼格式聲明通常,編碼格式聲明是必需的。如果 python 源碼文件沒有聲明編碼格式,python 解釋器會默認使用 ASCII 編碼,一旦源碼文件包含非ASCII編碼的字符,python 解釋器就會報錯。以 UTF-8 為例,以下兩種編碼格式聲明都是合乎規則的。我一直 UTF-8 編碼格式,喜歡使用第一種聲明方式。Windows 平臺上,編碼格式聲明必須位於 python 文件的第一行。
  • HTML 編碼規範
    來自:麥田連結:http://itmyhome.com/html/(點擊尾部閱讀原文前往)永遠遵循同一套編碼規範如果你發現本規範中有任何錯誤,敬請指正。基本規範語義使用符合語義的標籤書寫 HTML 文檔, 選擇恰當的元素表達所需的含義;<!
  • 《Google的Java編碼規範》(Google Java Style)在線地址
    Google最近發布了一份完整的Java編碼規範。規範的內容包括一些切實可行的硬性規定。Google內部均遵守此規範。該規範不僅涵蓋了代碼格式,還包括其他類型的約定和編碼標準。 Google最近發布了一份完整的Java編碼規範。規範的內容包括一些切實可行的硬性規定。
  • Google的Java編程風格指南(Java編碼規範)
    這份文檔是Google Java編程風格規範的完整定義。
  • python自學 第二章 python語言基礎之語法特點(注釋、代碼縮進、編碼規範)
    """ @功能:XXXX項目 @author:WEB前端修行日誌 @創建時間:2021-01-10"""多行注釋通常用來為python文件、模塊、類或者函數等添加版權、功能等信息在python中,三引號(』』』...』』』)或者(」」」..」」」)是字符串定界符,如果三引號作為語句的一部分出現,就不是注釋
  • 《第2章 Python 語法基礎》2.1.3 編碼規範!
    《第2章 Python 語法基礎》2.1.3 編碼規範!瀏覽器版本過低,暫不支持視頻播放2.1.3編碼規範>1、編寫規則:Python中採用PEP8編碼規範。2、命名規則:命名規範在編寫代碼中起到很重要的作用。①、模塊名:儘量短小,並且使用全部小寫字母。可以使用下劃線分割多個字母。
  • ascii編碼與unicode編碼
    因此,最早只有127個字符被編碼到計算機裡,也就是 7位 2進位數字,最高位(第八位)為 0 。    這個編碼表被稱為 ascii編碼,比如大寫字母 H 的編碼是 72(16進位48),小寫字母 o 的編碼是 111(16進位6F)。    定義字符數組 szHello ,初值為 "Hello同學們"。
  • 培養自己的php編碼規範,養成一個好習慣
    文章來自於:博客連結:商務合作的請加微信(QQ):2230304070為什麼我們要培養自己的編碼規範我們寫代碼的時候,一個好的編碼規範,對我們來說能夠起到很多意向不到的效果。至少會有一下的好處:1、提高我們的編碼效率。整齊劃一的代碼方便我們進行複製粘貼嘛!2、提高代碼的可讀性。3、顯示我們專業。別人看到了我們的代碼,發現整個代碼的書寫流程都整齊劃一,瞬間逼格就上去了!4、方便團隊協同工作。
  • glibc字符編碼研究
    Unicode是國際組織制定的可以容納世界上所有文字和符號的字符編碼系統,有UCS-2和UCS-4兩種編碼規範,其中UCS-2編碼長度為2位元組,UCS-4是前者的擴展採用4位元組編碼,因此UCS-4字符集的容量大於UCS-2,在Linux的glibc中對unicode的處理都是UCS-4編碼規範。unicode編碼系統兼容了ASCII編碼系統,因此unicode的前128個編碼對應了ascii碼。
  • 標準化、分類與編碼
    ICD-10我國的標準化工作:計算機與信息處理標準體系表;軟體標準:軟體測試文件說明、軟體開發流程規範、軟體產品文件編制說明、軟體工程名詞術語等。與複合代碼不同,每個特徵只用一個數值(而不是一個段)來編碼。
  • Floating-Point設計編碼風格與技巧
    Floating-Point設計編碼風格與技巧 George Wang 發表於 2017-11-22 15:20:01 儘管通常Fixed-Point(
  • 國家郵政局規範快遞電子運單 要求企業統一運單編碼
    原標題:國家郵政局規範快遞電子運單 要求企業統一運單編碼   國家郵政局規範快遞電子運單 要求企業統一運單編碼   國家郵政局近期專門就規範電子運單作出部署。企業總部應對電子運單統一編碼,並分配專門號段。並做好用戶信息保密工作。
  • PHP開發編碼規範特麼要注意
    目錄1 編寫目的2 整體要求3 安全規範3.1 包含文件3.1.1 命名規則3.1.2 存放規則3.2 安全規則3.3 一些針對PHP的規則3.4 其它處理規則3.4.1 對輸入參數值進行轉義處理3.4.2 操作大HTML文本4 編碼規範4.1
  • 編碼解碼是什麼意思?URL 如何編碼解碼?為什麼要編碼?
    編碼解碼是什麼?編碼是信息從一種形式或格式轉換為另一種形式的過程,也稱為計算機程式語言的代碼簡稱編碼。用預先規定的方法將文字、數字或其它對象編成數碼,或將信息、數據轉換成規定的電脈衝信號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是信息從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。
  • python字符的編碼與解碼
    為什麼要字符編碼這裡為了規範,就出現了ASCII編碼。ASCII ((American Standard Code for Information Interchange): 美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。
  • Python高效編程之88條軍規(1):編碼規範、字節序列與字符串
    Python程式設計師應該更關注空格的用法,下面是與空格相關的一些建議(並不一定要遵守,但按照這個規範,會讓你的Python程序看著更舒服):(2)儘管縮進可以使用任意多個空格,但建議統一使用4個空格進行縮進;(3)每行不應該有過多的字符,建議最多不要超過79的字符;(4)如果每行的字符過多(超過79個),應該折到下一行,而且應該在當前縮進的基礎上再使用4個空格進行縮進,如下圖所示:(5)
  • EC編碼的數學原理及LRC編碼簡介
    本文是《Erasure Coding in Windows Azure Storage》這篇paper的閱讀筆記,這篇paper主要介紹了windows azure storage存儲系統中使用的LRC(Local Reconstruction Codes)這種編碼方法,以及對比傳統的Reed-Solomon的編碼方式的優點。首先我們先回顧下傳統的ec編碼的數學原理。
  • 帶你走進編碼的世界——Unicode編碼
    美國人發明了計算機,設置了最早的編碼,他們只將數字、大小寫英文字母及一些符號一共128個字符編碼到計算機中。這套編碼表就是著名的ASCII編碼表,例如大寫字母A的二進位編碼為01000001,十進位編碼為65,十六進位編碼為41;小寫字母a的二進位編碼為01100001,十進位編碼為97,十六進位編碼為61。