简介
"移动语句"是改善代码可读性的基础重构手法。通过调整代码执行顺序,使相关逻辑集中呈现,可以降低理解成本,提升代码维护效率。
针对的症状(代码坏味道)
- 变量声明与使用位置分离
- 相关操作分散在不同代码块
- 存在不必要的临时变量
- 代码执行顺序不直观
移动语句的详细步骤
- 识别关联代码块
- 查找被中间代码隔开的关联语句
- 标记需要移动的代码段
- 分析依赖关系
- 确认语句间没有数据依赖冲突
- 检查作用域和生命周期
- 调整代码位置
- 将相关语句移动到相邻位置
- 保持代码执行顺序不变
- 验证逻辑
- 确保重构后功能不变
- 调整变量作用域
示例
重构前代码:
void processOrder(Order order) {
double tax = calculateTax(order);
sendConfirmationEmail(); // 不相关操作
double total = order.getAmount() + tax;
printReceipt(total);
}
重构后代码:
void processOrder(Order order) {
double tax = calculateTax(order);
double total = order.getAmount() + tax;
printReceipt(total);
sendConfirmationEmail(); // 相关操作集中在前
}
练习
基础练习题
- 变量声明移动
// 重构前
void renderPage() {
String header = buildHeader();
// ...其他操作...
String footer = buildFooter();
output(header + footer);
}
进阶练习题
-
条件判断重组
// 重构前 boolean isValid(User user) { logValidationStart(); if (user == null) return false; if (user.getAge() < 18) return false; // ...其他检查... }
综合拓展练习题
-
复杂逻辑整合
// 重构前 void exportData() { connectDB(); DataSet data = queryData(); File file = createTempFile(); // ...格式转换... uploadToCloud(file); cleanupTempFiles(); }
代码审查要点
-
优点:
- 提高代码线性可读性
- 减少变量作用域跨度
- 凸显核心业务逻辑
-
潜在问题:
- 保持执行顺序不变
- 注意闭包和副作用
- 避免破坏异常处理