跳转到内容

第二部分导读:最常用的基本手法

这一部分的手法都在回答同一个问题:代码该切成多大一块,每一块叫什么名字。它们是所有其他手法的工具。后面要提炼一个类,先得会提炼函数;要搬移一个函数,先得把它的声明改到合适;要把条件逻辑换成多态,第一步往往是把每个分支提成函数。所以这一部分放在最前面,也值得练得最熟。

拿第 1 章的运费函数来说,它经历的两步里,第一步“把是否包邮提成一个函数”就是本部分的第 4 章;把 order["weight_kg"] - 1 这个表达式起名叫 extra_kg,是第 5 章;如果当初那个函数叫 calc,先把它改名叫 shipping_fee,是第 6 章。这些手法单独看都很小,小到你可能觉得不值得起个名字。但正因为小,它们才能天天用、随手用,而且 IDE 大多能一键完成。

手法 一句话 流行度 档
提炼函数 / 内联函数(第 4 章) 把一段代码提成有名字的函数;反过来把没分量的函数放回去 ★★★ 完整
提炼变量 / 内联变量(第 5 章) 给表达式的一部分起名字;反过来把没分量的变量去掉 ★★★ 精简
改变函数声明(第 6 章) 改函数的名字、参数、返回值 ★★★ 完整
变量改名(第 7 章) 给变量一个说明用途的名字 ★★★ 速览
封装变量(第 8 章) 用函数包住对共享数据的读写 ★★ 精简
引入参数对象(第 9 章) 把总是一起出现的参数合成一个对象 ★★★ 完整
函数组合成类 / 函数组合成变换(第 10 章) 把操作同一数据的一组函数收到一起 ★★ 精简
拆分阶段(第 11 章) 把一段做两件事的代码拆成前后两个阶段 ★★★ 完整

闻到什么味道先看哪一章:

  • 过长函数,或者一段代码要靠注释才知道在干什么 → 第 4 章 提炼函数。
  • 神秘命名,函数名、变量名不说人话 → 第 6 章 改变函数声明、第 7 章 变量改名。
  • 过长参数列表、数据泥团,几个参数总是结伴出现 → 第 9 章 引入参数对象。
  • 全局数据、可变数据,一个变量被到处直接改 → 第 8 章 封装变量。
  • 发散式变化,一个函数既在解析输入又在做计算 → 第 11 章 拆分阶段。