[譯]編寫高可讀代碼的十個實踐

譯者:baiyutangphp

做者:Jason McCrearyhtml

我已經寫了20年的代碼,曾經和17個團隊用不一樣的編程語言建立了上百個項目。這些項目包括幾乎全部的軟件類型,從我的博客,到支撐3000個請求/秒的接口,再到頂級的銷售App
從這些經歷中,結合我看過的書,我愈來愈清晰的認識到編程中最重要的事:可讀性(readability)。
表面上看,可讀性多是主觀的,有時又受到編程語言、代碼庫和團隊的影響。可是當你深刻觀察,在代碼中的的一些核心元素讓他們更具備可讀性。
不少的編程者只關心機器,只要代碼可以運行,別的都不重要了。然而一種廣泛的辯解認爲,這會把咱們作的事中全部的人爲因素都消滅掉了。
最近的幾個月,我致力於提取這些因素,總結了10個實踐,目的是編寫可以提升代碼可讀性和下降複雜度的代碼。我已經詳細的寫出來並配上實例代碼在BaseCode.
可是不幸的是,不少反駁者認爲這些太基礎、微不足道。可是我向你保證,我遇到的每個壞代碼都沒有運用這些實踐,而且每一個好的代碼都有一個實踐例子,若是不是不少的話 git

格式化 Formatting

不少精力浪費在格式化了,縮進符號使用製表符仍是空格,函數或代碼結構體開啓的花括號是緊跟其後仍是另起一行?你會意識到格式化並非重要的事情。接受一個格式化標準,應用到代碼庫,並設置自動格式化。而後你才能把精力從新放在真正寫代碼上。 程序員

無用代碼 Dead code

全部的註釋塊、沒有使用的變量和從沒有真正執行的代碼都是會腐爛的。他們實際上告訴閱讀代碼的人:我不關心這些代碼。因此就開始腐爛了。隨着時間過去,這些無用的代碼將會殺死你的代碼庫,這就是經典的《破窗理論》此理論認爲環境中的不良現象若是被聽任存在,會誘令人們仿效,甚至變本加厲。
你必須找到並毀掉無用代碼,雖然這不須要成爲你的優先考慮點,可是你要始終是一名童子軍github

嵌套代碼 Nested code

image.png

配圖爲譯者選自網絡
幾乎全部的代碼都是業務邏輯,咱們編寫代碼去判斷、迭代和計算。這些常常致使循環或分支有着很是深的代碼塊嵌套。雖然這可能比較容易被計算機順序執行,可是這樣作可能會讓人閱讀起來費勁,這些代碼愈加複雜和不可讀。能夠經過「 衛語句」、儘早返回,或函數式編程方面來解決多層嵌套代碼的問題。

使用對象 Using objects

儘管當下是面向對象編程的時代,咱們仍是有基本類型偏執咱們發現這種偏執體如今過長的參數列表、數據團、自定義的數組(字典)結構,這些均可以重構爲對象。這麼作,不只可讓數據結構更正式,還爲那些包含原始數據的重複邏輯提供了一個可被追蹤的「根」或變量來源。 express

大代碼塊 Big Blocks

代碼能夠超過一個臨界線,我並不執着於一個死板的數字。當你肯定你有一個大的代碼塊的時候,這是你識別、重組和重構代碼的機會。這個簡單的過程讓你肯定上下文和對代碼的抽象水平,繼而你能夠正確區分職責,並把代碼重構成更加可讀和簡易化的代碼快。 編程

命名 Naming

毫無疑問,命名很難。但只由於咱們讓他變困難。在編程中,有一些頗有效的小建議,包括延遲命名。不要由於命名這件事而卡住進度,就繼續寫代碼吧。若是你必須命名一個變量一個句子,仍舊繼續寫代碼。我保證在你完成特性代碼或工做時,一個更好的名字必定會本身出現。 數組

刪除註釋 Removing Comments

這個實踐對我來講是原始規則改變者,這也是讓我開始關注代碼可讀性的緣由。儘管我努力解釋,可是仍然只有少一我的由於這個而討厭我。他們有舉了一個例子來講明註釋是徹底有必要的。誠然,當哈勃望遠鏡遙測系統必須經過返回687與傳統適配器鏈接以獲取未知讀數時,可能須要與註釋進行溝通。可是對於其餘一切,你應該挑戰你本身重寫代碼直到代碼不須要特別的註釋說明網絡

合理返回 Reasonable Returns

咱們返回了很奇怪的值,特別是邊界條件,好比 -1, 687null 。繼而,又寫了好多代碼來處理這些奇怪的值。實際上,null 的創造稱其爲 10億美圓的錯誤,你應該致力於返回一個更合理的值。理想狀況下,即使是消極不期待的方向,也能讓調用代碼繼續執行。若是有真正特殊的狀況,用用好的方式來傳達,而不是用null數據結構

"三" 規則 Rule of Three

想象一下,有一系列數字,我向你提供了數字 2 並問:下一個是什麼?多是3 或 4,也多是1 或2.1,實際上,你也不知道。而後,我提供了另外一個數字:2, 4並問:下一個是什麼?多是6或8或16。此次,儘管咱們增長了一些信心,可是咱們仍是不肯定。如今我提供了另外一個數字:2, 4, 16並問:下一個是什麼?如今有三個數字,咱們程序員的大腦會看到是平方並肯定下一個數字是256,這就是3規則。
這個例子演示了「若是不能引導咱們正確的思路,咱們不該該預先肯定抽象和設計」。「三」規則用延遲來打消了咱們和重複鬥爭的想法,直到咱們有更多的數據能夠作出正確的決定。用Sandi Metz的話說,「重複比錯誤的抽象便宜得多。

對稱 Symmetry

如今是最後一個,一個能給任意代碼像詩同樣的可讀性的實踐:對稱。這是引用自 Kent Beck 的《Implementation Patterns

Symmetry in code is where the same idea is expressed the same way everywhere it appears.

代碼中的對稱性是在任何出現的地方都能用相同的方式表達相同的想法。

這提及來容易作起來難啊,對稱更體現出了編寫創造性的一面。他是其餘事件的基礎:命名、結構、對象、模式。他還可能因開發語言、代碼庫、和團隊不一樣而異。所以,你能夠在平常事件來達到這個目標。而後,一旦你開始把對稱性應用到你的代碼裏,一個簡約純粹的形式就會出現而且代碼會很快成型。

DnTrL7PX4AAsB-C.jpeg

原文

jasonmccreary.me/articles/pr…

擴展閱讀

相關文章
相關標籤/搜索