关于 simplify-code
帮助开发者审查并降低代码复杂度的技能,提供识别冗余抽象、死代码、深层嵌套和过度参数化的清单与简化步骤,并强调验证行为不变。
主要功能
- 01识别不必要的抽象
- 02检查并清理死代码
- 03减少深层嵌套
- 04简化参数过多的函数
- 05按步骤简化并验证行为
适用场景
- 01重构难以理解的代码
- 02清除未使用代码和配置
- 03降低函数与控制流复杂度
- 04简化后检查测试与构建
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ vudovn/ ag-kit --skill simplify-code安装后在 Claude Code 中输入/simplify-code确认已加载。
详细介绍
简化代码——减少不必要的复杂性
最好的代码,就是你不必编写的代码。其次,是任何人都能读懂的代码。
核心原则
Complexity is a cost. Every abstraction, every indirection, every clever pattern
adds cognitive load. Simplify ruthlessly unless complexity serves a clear purpose.
简化检查清单
1. 不必要的抽象
| 问题 | 简化方式 |
|---|---|
| 只负责委托的包装类 | 移除包装类,直接使用内部类 |
| 只创建一种类型的工厂 | 改用直接构造 |
| 只有一种策略的策略模式 | 改用简单函数 |
| 只有一种实现的接口 | 移除接口,直接使用类 |
| 只有一个子类的抽象类 | 合并到子类中 |
| 仅包含 2 个值的配置对象 | 改用函数参数 |
2. 死代码
| 问题 | 操作 |
|---|---|
| 未使用的导入 | 移除 |
| 不可达分支 | 移除(先检查测试) |
| 注释掉的代码 | 移除(它在 git 历史中) |
| 未使用的变量/函数 | 移除 |
| 超过 6 个月的 TODO 注释 | 移除或创建问题 |
| 已发布功能的功能标志 | 移除标志,保留代码 |
3. 深层嵌套
// ❌ Before: 4 levels deep
function process(data) {
if (data) {
if (data.items) {
for (const item of data.items) {
if (item.active) {
doSomething(item)
}
}
}
}
}
// ✅ After: Early returns + filter
function process(data) {
if (!data?.items) return
data.items
.filter(item => item.active)
.forEach(doSomething)
}
4. 参数过多的函数
// ❌ Before: 8 parameters
function createUser(name, email, age, role, dept, active, verified, avatar) { }
// ✅ After: Object parameter
function createUser(opts: CreateUserOpts) { }
5. 过早优化
| 问题 | 简化方式 |
|---|---|
| 为少于 100 个条目自定义缓存 | 移除缓存,先进行测量 |
| 对开销很小的函数进行记忆化 | 移除记忆化 |
| 为小型模块延迟加载 | 直接导入 |
| 为 3 种状态设计复杂状态机 | 改用简单的 if/else 或 switch |
简化流程
步骤 1:识别复杂性
- Count nesting levels (target: ≤3)
- Count function parameters (target: ≤4)
- Count lines per function (target: ≤30)
- Count abstractions per feature (target: ≤2)
- Check for dead code (target: 0)
步骤 2:确认理解
简化之前,请确保你理解:
- 代码的实际功能(而非它看起来的功能)
- 编写成这样的原因(也许有其理由)
- 哪些测试覆盖了它(简化不得破坏测试)
步骤 3:逐步简化
1. Remove dead code first (safest)
2. Flatten nesting with early returns
3. Inline trivial abstractions
4. Merge related functions
5. Simplify data structures
步骤 4:确认行为未改变
npm run test # All existing tests still pass
npm run build # Still compiles
何时不应简化
| 情况 | 保留复杂性的原因 |
|---|---|
| 性能关键的热点路径 | 优化看起来可能很复杂,但确有必要 |
| 框架/库要求 | 外部限制 |
| 明确要求使用的模式 | 用户选择了这种架构 |
| 很快就需要扩展 | 抽象为已知的增长需求做好准备 |
先询问:“这种模式似乎过度设计了。我应该简化它,还是这种抽象另有原因?”
评论
支持 Markdown