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

课程来自于陶文,课程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(面向切面编程)
相关文章
相关标签/搜索