简介
"返回修改后的值"是提升代码可预测性的重要重构手法。通过将操作结果显式返回而不是直接修改参数,可以减少副作用,增强代码的可维护性和可测试性。
针对的症状(代码坏味道)
- 方法通过参数传递隐式修改状态
- 存在不明显的参数修改副作用
- 需要支持链式调用操作
- 方法执行结果不明确
返回修改后的值的详细步骤
- 识别副作用方法
- 查找修改参数的方法
- 标记隐式状态变更点
- 重构返回值
- 将void改为结果类型
- 返回修改后的新对象
- 调整调用方
- 用返回值替换参数修改
- 保持业务逻辑不变
- 清理参数修改
- 移除参数的可变操作
- 保持参数不可变性
示例
重构前代码:
class Calculator {
void increment(int[] value) {
value[0]++;
}
}
重构后代码:
class Calculator {
int increment(int value) {
return value + 1;
}
}
// 调用方
int result = calculator.increment(5);
练习
基础练习题
-
简单返回值重构
// 重构前 class StringProcessor { void appendSpace(StringBuilder sb) { sb.append(" "); } }
进阶练习题
-
复合对象重构
// 重构前 class OrderManager { void applyDiscount(Order order) { order.setAmount(order.getAmount() * 0.9); } }
综合拓展练习题
-
链式操作重构
// 重构前 class TextEditor { void bold(Text text) { text.setContent("<b>" + text.getContent() + "</b>"); } }
代码审查要点
-
优点:
- 消除隐式副作用
- 支持不可变数据结构
- 提高代码可测试性
-
潜在问题:
- 注意对象创建成本
- 保持方法原子性
- 处理大对象性能影响