《如何提升代碼的可讀性》課程筆記

課程來自於陶文,課程PPT知乎專欄:zhuanlan.zhihu.com/p/34982747算法

因公司資源提供有幸可以視頻學習陶大的課程,作筆記便於複習。編程

總述

讀代碼實際是大腦解釋和模擬執行代碼的過程,所以根據大腦擅長和不擅長的原理來提升代碼的可讀性。設計模式

大腦擅長的事情:動物指令集

  • 對象識別
  • 空間分解
  • 時序預測
  • 時序記憶

大腦不擅長的事情

  • 沒法映射到現實生活經驗的抽象概念
  • 冗長的偵探推理
  • 跟蹤多個同時變化的過程

方法一:Align Models 對應心智模型

數據和算法模型應和心智模型對應; 語言是心智模型的外在表現。多線程

1. 使用有意義的函數名

「有意義」:和心智模型對應異步

業務概念命名一致(理解產品語言)函數式編程

2. 按心智模型分解代碼

  • 按空間分解(對象與對象間的分離)
  • 按時間分解(一步作完作下一步)
  • 按層次分解(業務、通用分離)

3. 註釋不該重複代碼自己的工做

註釋幫助代碼映射到心智模型函數

註釋應該關注 why 而不是 what/how,或是解釋某種映射關係學習

如:提供代碼的時空複雜度/選擇模型的緣由等線程

方法二:Shorten Process 縮短探索長度

不要一口氣讓大腦跟蹤過長的流程。設計

1. 引入變量

2. 拆分函數

3. Early Return

知足某些條件時提前結束,避免大if..else統治整個函數

4. 縮小變量的做用域

使用參數進行狀態傳遞(函數式編程)

不使用全局變量修改狀態,而使用參數

方法三:Isolate Process 流程間獨立

相關聯的邏輯才放在一塊兒;

流程之間作分割,不一樣時描述多個流程的進度;

「高內聚低耦合」,知易行難。

「同時跟蹤不一樣流程」的產生

  1. 原本就是同時發生 -> 邏輯必須合併到一個流程中
    • 功能性需求和非功能性需求
    • 正常流程和異常處理
  2. 因爲效率
    • 異步I/O -> 給各自一個線程
    • 多線程
    • 向量指令集 SIMD
  3. 因爲功能 -> 邏輯必須合併到一個流程中
    • 多個信息同時展現
    • 並行業務流程
  4. 因爲流程複用 -> 邏輯必須合併到一個流程中
    • 版本差別
    • 產品策略

有時候邏輯必須合併到一個流程中。 有時候適當的複製粘貼,來將混雜的流程拆分以增長可讀性也是合理的。

提升信噪比:使用設計模式抽取流程中的職責

信噪比是相對概念,會隨場景而變化。 設計模式:裝飾器 / 策略 / 模板 / 適配器 / 狀態

提升一個目標的信噪比,每每會以下降另外一個目標的信噪比爲代價。

總結

  1. 優先嚐試給每一個流程一個本身的函數,不合並
    • 界面 -> 組件
    • 訂單 -> 單據,平行處理
    • 用協程而不是回調處理I/O
  2. 不得不一樣時處理多個流程時
    • 顯式插入:策略 / 模板 / 適配器 / 狀態 / 訪問者 / 觀察者
    • 隱式插入:裝飾器模式 / AOP(面向切面編程)
相關文章
相關標籤/搜索