《如何提高代码的可读性》课程笔记

790 阅读3分钟

课程来自于陶文,课程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(面向切面编程)