长函数
概述
长函数是代码异味的一种,指那些长度超过合理范围、功能过于复杂的函数。通常表现为函数行数过多、嵌套层级深、职责不单一,导致难以理解和维护。
关键内容
- 特征识别:
- 函数超过30-50行
- 需要滚动屏幕才能看完
- 嵌套层级过多
- 需要注释来解释局部逻辑
-
包含多个不同的操作逻辑
-
负面影响:
- 难以理解函数的整体逻辑
- 难以进行独立的单元测试
- 修改容易影响其他不相关的逻辑
- 容易隐藏重复的代码逻辑
-
增加引入bug的风险
-
重构策略:
- Extract Method:将函数的一部分提取为独立的方法
- Replace Temp with Query:用查询函数替代临时变量
- Introduce Parameter Object:当多个参数相关时引入参数对象
- Replace Method with Method Object:对于复杂函数使用方法对象模式
-
Decompose Conditional:分解复杂的条件逻辑
-
重构示例: ``` // 重构前:一个包含订单验证、计算总额、发送通知的长函数 function processOrder(order) { // 验证逻辑 (20行) // 计算逻辑 (30行) // 通知逻辑 (20行) }
// 重构后:将功能拆分到独立函数 function processOrder(order) { validateOrder(order); const totals = calculateOrderTotals(order); sendOrderNotifications(order, totals); return { order, totals }; } ```
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书
相关
- 代码异味 — 长函数所属的异味类别
- 重构 — 解决方法
- 单一职责原则 — 设计原则
- Extract Method — 具体重构技巧