如何編寫可讀性代碼

2021-01-08 AI撲社

作者:極鏈科技 湯紅燕

什麼叫可讀性代碼?

簡單來說,就是易於理解、耗腦時間少、可維護性較高的代碼。

編寫可讀性代碼

把信息裝到名字裡(一個好的名字可以承載很多信息)

1. 選擇專業的詞(避免「空洞」)

比如函數 getUserInfo( ) 是用來獲取用戶信息,但是,是從接口中獲取的信息呢?還是在頁面已經暴露的信息?看到的時候就會有疑問。

命名的時候,如果是從網際網路中獲得,可以使用fetchUserInfo( )來表示。

2. 找到更有表現力的詞(更清晰、精確)

比如:search 和 find 區別 ,再可以類似於表格數據的篩選, 可以考慮用更準確的詞彙去表示。

避免使用像 tmp 和 retval 這樣泛泛的名字。

3. 使用具體的名字更細緻地描述事物

對於一個變量包含十六進位字符串,命名為 let id,但是為何不命名成 let hex_id?

如果你的變量時一個度量值的話,最好讓名字帶上它的單位。

4. 名字應該有多長

在編寫代碼取名的時候總會有一些疑問,我的定義名稱該多長才合適?可以遵循以下幾點:

l 小作用域裡可以使用短的名字;

l 首字母縮略詞和縮寫(當然是在成員能看懂的情況下 TBColor -> TextBackgroundColor);

l 丟掉沒用的詞(no-padding-all -> no-padding);

l 利用名字的格式來傳遞含義(比如所有的class 是class-name, id 是 id_id);

不會讓人誤解的名字

常用的 filter() 命名,如果新同學看到,可能會產生疑問,這是過濾掉滿足要求的值呢還是不滿足要求的?

為了便於處理以上情況,有以下幾點建議:

l 使用 min 和 max 來表示(包含)極限

l 使用 first 和 last 來表示包含的範圍

l 使用 begin 和 end 來表示包含/排除範圍

l 給布爾值命名

對於語句 bool read_password = true 是我們已經讀取密碼,還是我們需要讀取密碼?

這時候可以用 need_password 或 user_is_authenticated 這樣的名字來代替;

像 is 、has 、can或should這樣的詞,就可以把布爾值變得更明確。

審美

代碼的審美,確切地說,有三條原則:

1. 使用一致的布局,讓讀者很快就習慣這種風格。

2. 讓相似的代碼看上去相似。

3. 把相關的代碼行分組,形成代碼塊。

該寫怎樣的注釋

1. 從代碼本身快速推斷出事實的不需要注釋

2. 不要為了注釋而注釋

3. 不要給不好的名字加注釋(不如改名字)

4. 加入「導演評論」,你可以在代碼中加入注釋來記錄你對代碼有價值的見解。

5. 為代碼中的瑕疵寫注釋

6. 給常量加注釋(有些常量不需要注釋,因為它們的名字已經很清楚,但很多常量可以通過加注釋得以改進)

7. 站在讀者的角度,「全局觀」注釋

寫出言簡意賅的注釋

1. 讓注釋保持緊湊

2. 避免使用不明確的代詞(如it,this等)

3. 潤色粗糙的句子

4. 精確地描述函數的行為

比如用輸入/輸出例子來說明特別的情況

下面是一個用來移除部分字符串的通用函數:

5. 聲明代碼的意圖

對於「具名函數參數」的注釋,就是像 C# Python 這類語言的命名函數參數,讓每個參數的意義更加明確。

比如:

6. 採用信息含量高的詞

l 避免使用代詞

l 儘量精確描述函數的行為

l 精心挑選輸入/輸出的例子

l 聲明代碼的高層次意圖,而非明顯的細節

l 用嵌入注釋解釋難以理解的函數參數

l 用含義豐富的詞語

簡化循環和邏輯

1. 把控制流變得易讀

l 條件語句中參數的順序

比較左側: 「被詢問」的表達式,它的值傾向於不斷變化

比較右側: 用來做比較的表達式,它的值更傾向於常量

l if/else 語句塊的順序

首先處理正邏輯而不是負邏輯

再處理簡單的情況

最後處理有趣的或者是可疑的情況

l ?: 表達式, 只有在簡單的情況下使用

l 避免 do/while 循環

l 從函數中提前返回

l 最小化嵌套

l 減少循環內嵌套

2. 拆分超長表達式

l 用做解釋的變量

l 總結變量(用一個短很多的名字來代替一大塊代碼,這就是總結變量)

l 拆分巨大的語句

比如:

顯而易見,這段代碼邏輯很清晰,但是看著太複雜,下面改掉:

這樣做有很多好處:

- 避免輸入的錯誤。

- 縮短了行的寬度,更容易快速閱讀。

- 如果類名字改變了,只需要改變一個地方就行了。

3. 變量與可讀性

l 減少變量,即那些妨礙的變量。通過離開處理結果來消除「中間結果」的變量。

l 減少每個變量的作用域,越小越好。

l 只寫一次的變量更好,那些只設置一次值的變量(或者 const 、final 、常量)使得代碼更容易理解。

4. 抽取不相關的子問題

l 積極地發現並抽取不相關的子邏輯:

- 看看某個函數或代碼塊,問問自己:這段代碼的高層次的目標是什麼?

- 對於每一行代碼,問下:它是為了目標而寫的麼?

- 如果足夠的行數在解決不相關的子問題,試圖抽取代碼到獨立函數中。

l 純工具代碼(封裝共用的函數)

l 其他多用途代碼(比如頁面上數據邏輯代碼)

l 創建大量通用代碼(組件)

- 通用代碼很好,因為「完全地從項目的其他部分中解耦出來」。

l 項目專有的功能(私有組件)

l 簡化已有接口,按需重塑接口

5. 一次只做一件事

應該把代碼組織得一次只做一件事情。如何給代碼整理碎片,下圖演示了這個過程:

6. 把想法變成代碼

如果有好的想法,則可以實現為代碼,但需要注意以下幾點:

l 清楚地描述邏輯

l 可了解相關函數庫,以便減少代碼量

l 把這個方法應用於更大的問題

l 用自然語言描述解決方案

l 遞歸地使用這種方法

7. 少寫代碼

「最好讀的代碼就是沒有代碼」,在收到一個需求的時候,要質疑和拆分你的需求,用小的代碼庫,去替代大的代碼庫;刪除沒有用的代碼,簡化實現過程;熟悉你周邊的庫,了解最優庫;對於一些庫的重用,可以極大的節省時間。

總結

以上就是關於可讀性代碼的建議和實現方式,好的代碼不僅閱讀輕鬆,維護起來也是事半功倍。養成好的書寫處理習慣,會為我們的工作和學習帶來極大的便利。

相關焦點

  • 快速提高代碼的可維護性與可讀性
    其實在程式設計師的生活中,去編寫一段可維護性強的代碼會讓他們在程式設計師之間得到更好的口碑。那麼該如何提高代碼的可維護性與可讀性呢?我會在文中進行一一解釋。注釋你的代碼/*注釋你的代碼至關重要,因為如果你編寫了一個程序卻未對其進行注釋,那麼缺少注釋將使你浪費時間來重新寫一遍代碼。畢竟基本上就算是你自己寫的代碼,幾個月不看那肯定就忘了。所以注釋代碼又幫助了別人也幫助了你自己。當然如何注釋好代碼又是一門學問了,已經超出了本文的討論範圍,如果讀者有興趣,我會在之後的文章中寫如何注釋好代碼。
  • 如何提高代碼可讀性,再教你一招
    如何提高代碼可讀性,再教你一招Hello,各位小夥伴,在前面的幾個章節中,我們重點講解了編程規範,其中對PEP8和Google編程規範進行了解讀,其中對代碼的縮進、行數、命名、注釋等都有明確的規範,似乎我們按照這樣的編程規範進行規範性寫代碼就可以了。
  • 如何編寫簡潔美觀的Python代碼
    那麼,我們如何編寫這種所謂漂亮的Python代碼呢?歡迎學習Python風格教程數據科學和分析領域的許多人來自非編程背景。我們先從學習編程的基礎知識開始,接著理解機器學習背後的理論,然後開始徵服數據集。
  • 這三個技巧,讓你的代碼可讀性提高300%
    本文不是在討論算法、數據結構、軟體架構和程序設計,而是在討論一些更基本、更重要的東西:可讀性。原始碼是程式設計師耗盡了心血和精力的作品,所以不應當存在「快刀斬亂麻」的現象。忽視這些規定看似讓代碼生成速度加快,但事實上往往導致事倍功半。代碼敲一次,閱讀無數次。因此,優化代碼提高可讀性顯得尤為重要。為了幫助生成高度可讀的代碼,本文歸納總結了必須遵守的3個重要規定。
  • Python編寫代碼的規範要求
    打開APP Python編寫代碼的規範要求 碼農阿勇 發表於 2020-01-16 17:44:00 遵循好的規範可以不僅提高我們代碼的可讀性,還可以提高程序開發效率。新手和高手之間的差別主要也體現在規範上,這裡勇哥主要給大家分享python的PEP8規範,希望大家在編寫代碼的時候按照規範要求去編寫。
  • 你的代碼「balance」怎麼樣?找到簡潔性和可讀性的平衡點
    代碼越簡潔,可讀性越高且能夠長期存在。用Python編寫簡潔代碼的方法有很多,本文想與大家分享筆者在日常Python項目中發現的特別有用的五個技巧。1.列表、字典和集合推導式列表推導式是眾多Python程式設計師最喜歡的特徵之一。這是一種從迭代器創建列表的簡潔方法。基本語法是[expression for x in iterable]。
  • 編寫更簡潔的Python代碼的5個技巧
    當您按照其官方網站上的下載和安裝說明進行操作時,很快就可以編寫&34;程序。當您了解更多關於Python的知識時,您可能會著迷於它使用不同方法實現相同功能的靈活性。 但是,遲早您會發現某些解決方案比其他解決方案更簡潔。 更重要的是,從長遠來看,更簡潔的代碼往往更易於閱讀和維護。當然,有很多方法可以用Python編寫簡潔的代碼。
  • 提高可讀性,3 個讓代碼更簡潔的小技巧
    在完成代碼重構之後,我總是會獲得一種莫名的成就感。其實,不僅是大規模的代碼重構能給我帶來這種感覺,一些小的修改也能讓我感到很高興。以下3個簡單的重構技巧就能幫你改善代碼的可讀性。
  • 編寫乾淨的C#代碼技巧
    介紹在當今時代,編寫代碼並不困難。然而,編寫乾淨且可伸縮的代碼並不容易。在本文中,我們將討論一些為我們的項目編寫乾淨C#代碼的技巧。乍一看,任何以前從未見過您的代碼的開發人員都必須儘可能地理解它,它幫助我們更好地理解代碼。下面是編寫乾淨C#代碼的一些重要技巧。
  • 編寫高質量代碼:改善Python程序的91個建議 |文末下載
    但當有了一定經驗之後,就會對代碼規範和風格有更高的要求。這樣既能提升代碼的質量,也更易於後期的維護和擴展,尤其在與他人協作開發時非常重要。在通往「Python技術殿堂」的路上,這本書將為你編寫健壯、優雅、高質量的Python代碼提供切實幫助!
  • 關於如何編寫 Clean Code 的 6 個簡單技巧
    讓我們來簡化這個任務,在本文中,我們將討論編寫整潔代碼的一些好處,然後再來看看我們總結的 6 個技巧和實踐,以便讓開發人員理解,編寫 Clean Code 最常使用的一些技巧。之前,我們在討論編寫簡潔代碼的一些好處,現在是時候學習一些技巧來幫助我們做到這一點。正如我們將要看到的,擁抱簡潔的代碼並遵循這些建議進行實踐下去。
  • 如何編寫漂亮的 React 代碼?
    當然,如果出於某種原因,React 對我來說是不愉快的,而我想要花時間編寫代碼來獲得樂趣,那麼最明顯的做法就是不要使用 React。而我大多數時間就是不用 React 的。但是,眾所周知,編碼是多方面的:你有代碼、工件、你向計算機輸入的符號行,但你也有代碼結果,它的輸出,你用程式語言表達的想法的現實意義。可以從我的代碼與現實世界的交互中獲得同等甚至更大的樂趣,我對此比較在乎。
  • 編寫高質量代碼的50條黃金守則-Day 01(首選隱式類型轉換)
    編寫高質量代碼的50條黃金守則-Day 01(首選隱式類型轉換),本文由比特飛原創發布,轉載務必在文章開頭附帶連結:https://www.byteflying.com/archives/6455該系列文章由比特飛原創發布,計劃用半年時間寫完全50篇文章,為大家提供編寫高質量代碼的一般準則。
  • 在競爭性編程中高效地編寫C / C ++代碼,需您本人籤收
    1.模板是通用編程的基礎,它涉及以獨立於任何特定類型的方式編寫代碼。2.宏是已命名的代碼片段。每當使用該名稱時,它就會被宏的內容替換。3.向量與動態數組相同,具有在插入或刪除元素時自動調整大小的能力,並且容器自動處理其存儲。
  • 編碼是一個認真思考的過程,如何有效提高代碼的可讀性?
    編寫代碼,實質是在梳理邏輯,為了完善整個邏輯流程,我們借用意識到沒有,代碼的好壞一定程度上可以從邏輯層面評判。符合邏輯,不一定是最優的代碼不符合邏輯,一定不是好的代碼從這層面來看,梳理邏輯極為重要,邏輯通了,剩下的就是實現了。邏輯的串接靠的是程式語言的變量、函數、流程控制、循環、注釋等。本文從這些層面講述,如何編寫可讀代碼。
  • 如何編寫高質量的Pythonic風格代碼
    每一種語言都有它的編程風格,打個比方就像各種菜系,粵菜,川菜,淮揚菜每一種都有自己的獨特風格.Python的開發者用Pythonic這個詞來形容那種符合python風格的代碼.這種pythonic風格的代碼,既不是非常嚴格的規範,也不是編輯器強加給開發者的規則,它是大家在python語言的過程中指定的一種指南,一種協同工作過逐漸形成的習慣.宗旨就是直觀,簡潔而容易讀.
  • 程式設計師如何寫出優質乾淨的代碼?這6個技巧了解一下
    作為一名開發者,編寫一手優質而乾淨的代碼很重要!但是,要想寫出乾淨的代碼並不是一件容易的事,需要嘗試不同的技巧和實踐。再者,編寫乾淨的代碼,也能夠讓新員工或團隊其他成員更容易、更快速的接手;而且,由於你寫出了乾淨的代碼,別人也會向你學習,也就更容易跟著寫出乾淨的代碼;那麼,自己接手別人代碼的時候,也會更加容易。
  • 如何編寫出擁抱變化的代碼?
    在實際的開發中,編寫出易維護和易接受變化的代碼並非易事,想要實現可能更加困難重重:源碼難於理解、依賴關係指向不明、耦合也很令人頭疼。難道就真的就沒有辦法了嗎?本文中我們一起探討幾個技術原則和一些編碼理念,讓你的代碼跟著需求走,而且易維護易拓展。
  • 如何寫出讓同事好維護的代碼?
    注意了,這篇教你如何寫出不讓同事無法維護的代碼!作者:xybaby,原文:https://www.cnblogs.com/xybaby/p/11335829.html寫出整潔的代碼,是每個程式設計師的追求。
  • SEO還需要關注文本可讀性嗎?
    編寫可讀文本可能會令人生畏。特別是如果您的網站主題很困難或技術性很強。如果您的讀者習慣了行話,是否真的有必要關注可讀性?好吧,儘管您的受眾可能要完成閱讀您的行話的任務,但SEO的全部目的是吸引訪問量超出您已經覆蓋的受眾。如果您的目標是在搜尋引擎中排在首位,那麼您應該擁有易於理解和理解的文字。