重构手法——函数行为重塑类 | 语意 | 拆分临时变量

43 阅读2分钟

简介

"拆分临时变量"是提升代码表达力的基础重构手法。通过为不同计算阶段的临时变量赋予独立存在,可以消除理解歧义,增强代码的可维护性和可测试性。

针对的症状(代码坏味道)

  • 临时变量被多次赋值且用途改变
  • 变量名称无法准确描述当前计算阶段
  • 存在多用途的中间计算结果
  • 需要跟踪变量值的多次变化

拆分临时变量的详细步骤

  1. 识别复用变量
    • 查找承担多个计算任务的临时变量
    • 标记不同计算阶段的边界
  2. 创建独立变量
    • 为每个计算阶段声明新变量
    • 使用明确语义命名变量
  3. 逐步替换引用
    • 逐个阶段替换变量使用
    • 保持计算结果不变
  4. 验证逻辑
    • 检查边界条件处理
    • 确保计算结果正确性

示例

重构前代码:

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);

练习

基础练习题

  1. 简单计算拆分

    // 重构前
    double result = mass * acceleration;
    result = result * time; // 计算动量
    

进阶练习题

  1. 循环计算拆分

    // 重构前
    double total = 0;
    for(Product p :products){
         total +=p.getPrice();
         total *=1.05; // 添加税费
     }
    

综合拓展练习题

  1. 多阶段处理
    // 重构前
    double value = initialValue;
    value = processStage1(value);
    value = processStage2(value); // 完全改变计算意义
    value = formatOutput(value);
    

代码审查要点

  1. 优点:

    • 增强代码可读性
    • 减少计算耦合
    • 支持不可变性
  2. 潜在问题:

    • 避免过度拆分
    • 注意变量作用域
    • 保持计算效率