用途
Simplify 是一个代码简化技能,用于在不改变现有行为的前提下降低代码复杂度。其目标不是减少代码行数,而是让代码更容易阅读、理解、修改和调试。判断标准是:新加入团队的成员能否比原版更快地理解这段代码。
适用场景
资料列出的适用时机包括:
- 功能已可运行且测试通过,但实现比需要的更臃肿;
- 代码审查中提出可读性或复杂度问题;
- 遇到深层嵌套逻辑、过长的函数或不清晰的命名;
- 重构在时间压力下写出的代码;
- 合并分散在多个文件中的相关逻辑;
- 合并引入重复或不一致的改动之后。
不适用场景包括:代码本身已清晰可读时不要为简化而简化;尚未理解代码功能时先理解再简化;代码属于性能关键路径且简化版本会出现可测量的性能下降;即将整体重写该模块;以及简化一次性丢弃的代码。
主要原则
- 严格保持行为一致:只改变表达方式,不改变输入输出、副作用、错误行为和边界情况;所有现有测试无需修改即可通过。
- 遵循项目约定:先阅读 AGENTS.md 等项目约定,参考邻近代码的导入、命名、函数风格、错误处理和类型标注方式。
- 清晰优先于取巧:当紧凑写法需要停顿解析时,选择显式代码,例如用可读的控制流替代嵌套三元表达式,用有名称的中间步骤替代密集的内联转换。
- 保持平衡:避免过度简化,例如不要内联掉承载含义的名称,不要把无关逻辑合并进一个大函数,不要移除服务于可测试性或可扩展性的抽象,不要以行数取代可理解性。
- 限定改动范围:默认只简化近期修改的代码,避免无关的顺手重构,除非明确要求。
使用方式
技能定义的流程分为四步。
第一步,动手前先理解。回答代码的职责是什么、谁调用它、它调用谁、边界情况和错误路径有哪些、是否有测试定义预期行为、以及当初可能为何这样写;无法回答时继续阅读上下文。
第二步,寻找简化机会。资料列出的信号包括:深层嵌套、职责混杂的长函数、嵌套三元表达式、布尔标志参数、重复条件判断、泛化或误导性命名、重复逻辑、死代码,以及没有增加价值的包装或抽象。
第三步,逐步修改。每次只做一处简化,修改后运行相关测试,仅在行为保持不变时保留改动;尽可能把重构与功能开发分开。
第四步,验证结果。确认代码确实更易理解、diff 干净可审查、仍符合项目约定,并确认行为、错误处理和副作用均未改变。
仓库指引
针对该技能所在仓库,资料给出的指引是:偏好直白的 TypeScript 而非取巧的压缩写法;保留现有运行时行为、测试和钩子;当显式命名和更小、更聚焦的辅助函数能提升可读性时优先采用;将重构严格限制在当前任务或审查反馈范围内。
验证清单
- 现有测试未经修改即可通过;
- 构建、类型检查和 lint 仍通过;
- 未重构无关文件;
- 错误处理没有被削弱或删除;
- 结果比原版更容易审查。
限制
资料未提供该技能的安装命令、具体运行方式、支持的平台或工具集成信息,暂未提供。