simplify · git:20260817.d4dfa41 · 2026-08-17 · sha256 cbb772316318f86e

simplify git:20260817.d4dfa41A

Immutable. This exact content is served forever at /api/v1/blob/cbb772316318f86e.

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

# 收尾清理

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

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

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

## 清单一:复用

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

## 清单二:质量

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

## 清单三:效率

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

## 修的时候

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