【讀書筆記】重寫可讀代碼的藝術

一、代碼應該易於理解

這裏提出一個概念-理解代碼時間,我們應該讓別人理解代碼的時間越短越好。

而不是所用的代碼越短越好。

1 變量名稱

  • 避免使用temp/size/foo/get/stop這種意義不清晰或者表達意思不多的詞彙
  • 循環中如果有意義,避免使用i/j,要用users/numbers這種有業務意義的詞
  • 數值帶單位,比如秒還是毫秒都是時間,但是加上_ms或者_s就會一下子看出來不會處理出錯
  • 作用域很小的時候名稱可以是短的
  • 不需要進行首字母縮寫

2 命名技巧

  • min和max表示極限
  • first和last表示包含的範圍
  • begin和end表示包含/排除範圍
  • 布爾值要求定義明確,比如 use_ssl = true
  • 和期望表示一致

3 審美

  • 相似的代碼應當看上去相似
  • 必要時使用列對齊,增加空白
  • 用段落隔開增加邏輯

作用

  • 消除大量代碼重複
  • 添加新代碼更簡單
  • 閱讀變得更直白

4 註釋

  • 註釋的目的是幫助讀者瞭解的和作者一樣多
  • 寫註釋之後會提高理解代碼的速度,業務簡單邏輯複雜的也要寫註釋
  • 註釋加入思考過程,供以後參考
  • 關鍵字
    • todo 還沒處理
    • fixme 已知的無法運行代碼
    • hack 粗糙的解決問題方式
    • xxx 危險重要的問題
  • 常量加上註釋
  • 標記意料之中的疑問
  • 提前聲明代碼的問題
  • 全局、總結的註釋
  • 聲明高層次含義,而不是明顯的細節

二、簡化循環和邏輯

1 條件語句中的參數順序

  • 比較的值是不斷變化的,比較的表達式的值傾向於常量
  • 優先正邏輯,優先簡單邏輯,優先異常
  • 三目運算符只處理最簡單的邏輯,默認使用if/else
  • 避免使用do/while
  • 從函數中提前返回return結果,通過提前return減少邏輯嵌套

2 拆分超長的表達式

  • 引入做解釋的變量
  • 使用總結變量
  • 德摩根定理,取反之後顛倒邏輯,增加可讀性
  • 短路邏輯會增加閱讀時間

3 變量的可讀性

  • 減少沒有價值的臨時變量,減少中間結果
  • 縮減作用域
  • 操作變量的地方越多,越難確定他的值

三、重新組織代碼

工程學就是大問題拆成小問題再把這些問題的方案放回一起。把這條原則應用於代碼會使代碼更健壯並且更容易讀。

這也就是我們最基本的分而治之以及抽象的思想。

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

  • 關注更高層次的代碼
  • 把一些解決了不相關的子問題的代碼,抽出到獨立的代碼中
  • 子問題更容易被測試
  • 創建大量通用代碼/工具類
  • 簡化已有接口,按需重塑接口
  • 把一般代碼和項目專有代碼分開

2 一次只做一件事

應該把代碼組織得一次只做一件事情。

  • 整理碎片,切分小任務

2 想法變成代碼

  • 清晰的自然語言描述邏輯,注意關鍵詞和短語,寫出匹配的代碼
  • 如果你不能把問題說明白,那估計是缺少了什麼東西或者定義

在這裏插入圖片描述

泰迪熊太難了~

3 少些代碼

最好讀的代碼就是沒有代碼。

  • 質疑和拆分需求,學會縮減需求
  • 定期刪除沒用的代碼
  • 重用庫
  • 經常熟悉標準庫的API,避免重複編寫基礎代碼

三、精選話題

1 測試與可讀性

  • 測試具有可讀性,測試代碼可以當做非正式的文檔
  • 對使用者隱去不重要的細節,以便更重要的細節會更突出
  • 讓錯誤信息更具可讀性
  • 簡化輸入值。又簡單又能完成工作的測試值更好
  • 給測試命名一般Test_開頭

參考資料

  • 《編寫可讀代碼的藝術》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章