---
name: simplify
description: 功能跑通之后、交付之前的收尾清理。按复用、质量、效率三张清单过一遍刚改的代码并修掉发现的问题。只碰这次改动的范围，不搞漫游式重构。
---

# 收尾清理

时机：功能已经工作、验证已经过了。先圈范围：

```bash
git diff --stat        # 这次到底动了哪些文件
```

`[约束]` 只清理**这次改动碰过的**代码。别处的烂代码记下来告诉用户，
不要顺手改——收尾变漫游重构，diff 就没法审了。

## 清单一：复用

- 新写的函数仓库里是不是已经有了？搜同名、同义词、相邻目录的 utils。
  手搓的字符串处理、路径拼接、防抖节流、类型守卫是重灾区。
- 复制粘贴改两行的代码块，统一成一个带参数的。

## 清单二：质量

- **冗余状态**：能从现有状态推导的值不要再存一份——存两份就要同步
  两份，忘了同步就是 bug。
- **参数蔓延**：给函数加到第 5、6 个参数时，该重构签名了。
- **字符串当类型用**：仓库里已有常量、枚举、union 的地方不要写裸
  字符串。
- **废话注释**：解释「代码做了什么」的删掉（命名已经说了）；叙述
  本次改动的删掉（那是 commit message 的事）。只留「为什么这么做」
  和代码表达不了的约束。
- **只为这次改动服务的兼容垫片**：没人用的旧签名、多余的重导出、
  「以防万一」的分支。

## 清单三：效率

- 重复计算、循环里的重复 IO、N+1 查询；
- 相互独立的异步操作在串行等待（能并发的并发）；
- 无界增长：只进不出的缓存、数组、事件监听器；
- 读整个文件只为用一小段、拉全量列表只为过滤出一条。

## 修的时候

- 一次一类，每改完一批跑一次测试——清理**不该改变行为**，测试是
  唯一的证明。
- 发现不值得修的就跳过并说一句为什么（比如要大动干戈）。清单是
  工具，不是任务。
