高質量代碼的原則

原文連接: 編程的原則:改善代碼質量的101個方法

簡單性原則

What:追求簡單

自始至終都以最簡單的邏輯編寫代碼,讓編程初學者一眼就能看懂。在編程時咱們要重視的是局部的完整性,而不是複雜的總體關聯性。程序員

Why:Bug 喜歡出如今複雜的地方

軟件故障常集中在某一個區域,而這些區域都有一個共同的特色,那就是複雜。編寫代碼時若是追求簡單易懂,代碼就很難出現問題。不過,簡單易懂的代碼每每給人一種不夠專業的感受。這也是經驗老到的程序員喜歡寫老練高深的代碼的緣由。因此咱們要有足夠的定力來抵擋這種誘惑。編程

Do:編寫天然的代碼

放下高超的技巧,堅持用簡單的邏輯編寫代碼。既然故障集中在代碼複雜的區域,那咱們只要讓代碼簡單到讓故障無處可藏便可。不要盲目地讓代碼複雜化、臃腫化,要保證代碼簡潔。安全

同構原則

What:力求規範

同等對待相同的東西,堅持不搞特殊。同等對待,舉例來講就是同一個模塊管理的數值所有采用同一單位、公有函數的參數個數統一等。框架

Why:不一樣的東西會更顯眼

相同的東西用相同的形式表現可以使不一樣的東西更加突出。不一樣的東西每每容易產生 bug。遵循同構原則能讓咱們更容易嗅出代碼的異樣,從而找出問題所在。
統一的代碼頗具美感,而美的東西通常更容易讓人接受,所以統一的代碼有較高的可讀性。函數

Do:編寫符合規範的代碼

可靠與簡單是代碼不可或缺的性質,在編寫代碼時,務必剋制住本身的表現欲,以規範爲先。編碼

對稱原則

What:講究形式上的對稱

在思考一個處理時,也要想到與之成對的處理。好比有給標誌位置 1 的處理,就要有給標誌位置 0 的處理。設計

Why:幫助讀代碼的人推測後面的代碼

具備對稱性的代碼可以幫助讀代碼的人推測後面的代碼,提升其理解代碼的速度。同時,對稱性會給代碼帶來美感,這一樣有助於他人理解代碼。
此外,設計代碼時將對稱性歸入考慮的範圍能防止咱們在思考問題時出現遺漏。若是說代碼的條件分支是故障的溫牀,那麼對稱性就是思考的框架,能有效阻止條件遺漏。code

Do:編寫有對稱性的代碼

在出現「條件」的時候,咱們要注意它的「反條件」。每一個控制條件都存在與之成對的反條件(與指示條件相反的條件)。要注意條件與反條件的統一,保證控制條件具備統一性。
咱們還要考慮到例外狀況並極力避免其發生。例外狀況的特殊性會破壞對稱性,成爲故障的溫牀。特殊狀況過多意味着需求沒有獲得整理。此時應從新審視需求,儘可能從代碼中剔除例外狀況。
命名也要講究對稱性。命名時建議使用 set/getstart/stopbegin/ endpush/pop 等成對的詞語。對象

層次原則

What:講究層次

注意事物的主從關係、先後關係和本末關係等層次關係,整理事物的關聯性。
不一樣層次各司其職,同種處理不跨越多個層次,這一點很是重要。好比執行了獲取資源的處理,那麼釋放資源的處理就要在相同的層次進行。又好比互斥控制的標誌位置 1 和置 0 的處理要在同一層次進行。資源

Why:層次結構有助於提升代碼的可讀性

有明確層次結構的代碼能幫助讀代碼的人抽象理解代碼的總體結構。讀代碼的人能夠根據自身須要閱讀下一層次的代碼,掌握更加詳細的信息。
這樣能夠提升代碼的可讀性,幫助程序員表達編碼意圖,下降 bug 發生的機率。

Do:編寫有抽象層次結構的代碼

在編寫代碼時設計各部分的抽象程度,構建層次結構。保證同一個層次中的全部代碼抽象程度相同。另外,高層次的代碼要經過外部視角描述低層次的代碼。這樣作能讓調用低層次代碼的高層次代碼更加簡單易懂。

線性原則

What:處理流程儘可能走直線

一個功能若是能夠經過多個功能的線性結合來實現,那它的結構就會很是簡單。
反過來,用條件分支控制代碼、毫無章法地增長狀態數等行爲會讓代碼變得難以理解。咱們要避免作出這些行爲,提升代碼的可讀性。

Why:直線處理可提升代碼的可讀性

複雜的處理流程是故障的溫牀。故障多出如今複雜的條件語句和循環語句中。另外,goto 等讓流程出現跳躍的語句也是故障的多發地。
若是能讓處理由高層次流向低層次,一鼓作氣,代碼的可讀性就會大幅提升。與此同時,可維護性也將提升,添加功能等改良工做將變得更加容易。
通常來講,自上而下的處理流程簡單明快,易於理解。咱們應避開復雜反覆的處理流程。

Do:儘可能不在代碼中使用條件分支

儘可能減小條件分支的數量,編寫能讓代碼閱讀者線性地看完整個處理流程的代碼。
爲此,咱們須要把一些特殊的處理拿到主處理以外。保證處理的統一性,注意處理的流程。記得時不時俯瞰代碼總體,檢查代碼是否存在過於複雜的部分。
另外,對於通過長期維護而變得過於複雜的部分,咱們能夠考慮對其進行重構。明確且可靠的設計不只對咱們自身有益,還能夠給負責維護的人帶來方便。

清晰原則

What:注意邏輯的清晰性

邏輯具備清晰性就表明邏輯能清楚證實自身的正確性。也就是說,咱們編寫的代碼要讓人一眼就能判斷出沒有問題。任何不明確的部分都要附有說明。

Why:消除不肯定性

代碼免不了被人一遍又一遍地閱讀,因此代碼必須保持較高的可讀性。編寫代碼時若是追求高可讀性,咱們就不會採用取巧的方式編寫代碼,編寫出的代碼會很是天然。代碼是給人看的,也是由人來修改的,因此咱們必須以人爲對象來編寫代碼。消除代碼的不肯定性是對本身的做品負責,這麼作也能夠爲後續負責維護的人提供方便。

Do:編寫邏輯清晰的代碼

咱們應選用直觀易懂的邏輯。會給讀代碼的人帶來疑問的部分要麼消除,要麼加以註釋。另外,咱們應使用任何人都能馬上理解且不存在歧義的術語。要特別注意變量名等必定不能沒有意義。

安全原則

What:注意安全性

就是在編寫代碼時刻意將不可能的條件考慮進去。好比即使某個 if 語句必定成立,咱們也要考慮 else 語句的狀況;即使某個 case 語句必定成立,咱們也要考慮 default 語句的狀況;即使某個變量不可能爲空,咱們也要檢查該變量是否爲 null

Why:防止故障發展成重大事故

硬件提供的服務必須保證安全,軟件也同樣。硬件方面,好比取暖器,爲防止傾倒起火,取暖器通常會配有傾倒自動斷電裝置。一樣,設計軟件時也須要考慮各類狀況,保證軟件在各類狀況下都能安全地運行。這一作法在持續運營服務和防止數據損壞等方面有着積極的意義。

Do:編寫安全的代碼

選擇相對安全的方法對具備不肯定性的部分進行設計。列出全部可能的運行狀況,確保軟件在每種狀況下都能安全運行。理解需求和功能,將各類狀況正確分解到代碼中,這樣能有效提升軟件安全運行的機率。爲此,咱們也要將不可能的條件視爲考察對象,對其進行設計和編程。不過,爲了統一標準,咱們在編寫代碼前最好規定哪些條件須要寫,哪些條件不須要寫。

相關文章
相關標籤/搜索