简介
"拆分临时变量"是提升代码表达力的基础重构手法。通过为不同计算阶段的临时变量赋予独立存在,可以消除理解歧义,增强代码的可维护性和可测试性。
针对的症状(代码坏味道)
- 临时变量被多次赋值且用途改变
- 变量名称无法准确描述当前计算阶段
- 存在多用途的中间计算结果
- 需要跟踪变量值的多次变化
拆分临时变量的详细步骤
- 识别复用变量
- 查找承担多个计算任务的临时变量
- 标记不同计算阶段的边界
- 创建独立变量
- 为每个计算阶段声明新变量
- 使用明确语义命名变量
- 逐步替换引用
- 逐个阶段替换变量使用
- 保持计算结果不变
- 验证逻辑
- 检查边界条件处理
- 确保计算结果正确性
示例
重构前代码:
double temp = 2 * (width + height); // 计算周长
System.out.println("周长:" + temp);
temp = width * height; // 计算面积
System.out.println("面积:" + temp);
重构后代码:
final double perimeter = 2 * (width + height);
System.out.println("周长:" + perimeter);
final double area = width * height;
System.out.println("面积:" + area);
练习
基础练习题
-
简单计算拆分
// 重构前 double result = mass * acceleration; result = result * time; // 计算动量
进阶练习题
-
循环计算拆分
// 重构前 double total = 0; for(Product p :products){ total +=p.getPrice(); total *=1.05; // 添加税费 }
综合拓展练习题
- 多阶段处理
// 重构前 double value = initialValue; value = processStage1(value); value = processStage2(value); // 完全改变计算意义 value = formatOutput(value);
代码审查要点
-
优点:
- 增强代码可读性
- 减少计算耦合
- 支持不可变性
-
潜在问题:
- 避免过度拆分
- 注意变量作用域
- 保持计算效率