用途:AI 生成的代码常常能跑但分支繁杂。本技能通过测量圈复杂度、重构热点函数,让代码保持人类可维护,并符合代码库的长期方向,而非只追求指标好看。
测量优先:CC = 决策点 + 1。决策点包括 if、else if、case、循环、catch、三元表达式,以及条件中的 &&、||。项目 linter 配置优先:若 eslintrc、radon 配置、sonar 配置等设定了复杂度阈值,以它为准;无配置时用默认阈值:1-5 可接受;6-10 留意,顺手改;11-15 立即重构;15+ 必须拆分。
优先使用真实工具而非目测:Python 用 radon cc -s -a <path>;JS/TS 用 eslint complexity 规则;Go 用 gocyclo;多语言用 lizard <path>。无工具时按函数手动计数并展示结果。
重构策略(按优先级):卫语句(反转条件、提前返回、消除嵌套);提取函数(命名说明做什么而非怎么做);用查找表/映射替代 if-else 或 switch 链;命名谓词;当 switch-on-type 出现在两处以上时用多态/策略;扁平化循环(提取循环体,用 continue 替代嵌套 if)。
硬性规则:保持行为不变,重构前后运行测试;无测试需说明并建议补充,保守重构;不要为指标作弊,复杂度应移入命名良好的单元而非藏进聪明的一行代码;未经询问不破坏公共 API 或导出签名;小而命名清晰的函数优于带注释分段的少数函数;每个函数单一职责,名字需要“and”就拆分。
工作流:测量所有涉及函数,按 CC 降序排列;先报告热点及数值;从最差的开始逐个重构;重新测量并给出前后对比表;验证测试通过、行为不变、diff 可审查。
输出格式:每次重构结束附复杂度报告表(函数、Before、After)、提取出的函数名、行为验证方式。文字尽量精简,用数字和 diff 说话。
限制:资料未提供具体安装命令、收费信息或平台支持范围;实际阈值与工具可用性取决于项目环境。