简介
"合并重复的条件片段"是消除代码冗余的有效重构手法。通过提取条件分支中的公共代码,可以降低维护成本,提高代码的可读性和可修改性。
针对的症状(代码坏味道)
- 多个条件分支包含相同代码片段
- 修改公共逻辑需要改动多处
- 条件判断前后存在重复操作
- 代码中存在相似的条件结构
合并重复条件片段的详细步骤
- 识别重复代码
- 查找多个条件中的相同代码块
- 标记可合并的代码片段
- 分析条件结构
- 确认代码执行顺序无关
- 检查条件间的互斥关系
- 提取公共代码
- 将重复代码移到条件外部
- 使用卫语句简化条件
- 验证逻辑
- 确保执行顺序保持不变
- 检查边界条件处理
示例
重构前代码:
void processOrder(Order order) {
if (order.isPriority()) {
log.info("Processing priority order");
double total = calculateTotal(order);
sendConfirmation(order);
} else {
log.info("Processing priority order");
double total = calculateTotal(order);
queueForProcessing(order);
}
}
重构后代码:
void processOrder(Order order) {
log.info("Processing priority order");
double total = calculateTotal(order);
if (order.isPriority()) {
sendConfirmation(order);
} else {
queueForProcessing(order);
}
}
练习
基础练习题
-
简单条件合并
// 重构前 String getGrade(int score) { if (score >= 90) { System.out.println("Evaluated"); return "A"; } else { System.out.println("Evaluated"); return "B"; } }
进阶练习题
-
嵌套条件处理
// 重构前 void checkSystem(boolean isTestEnv) { if (isTestEnv) { initMockDB(); loadConfig(); runDiagnostics(); } else { loadConfig(); connectRealDB(); runDiagnostics(); } }
综合拓展练习题
-
多重复片段
// 重构前 void exportData(String format) { try { if (format.equals("CSV")) { prepareStorage(); generateCSV(); uploadCloud(); } else { prepareStorage(); generatePDF(); uploadCloud(); } } finally { cleanupTemp(); } }
代码审查要点
-
优点:
- 减少代码重复
- 降低维护成本
- 突出业务差异点
-
潜在问题:
- 保持条件完整性
- 注意执行顺序依赖
- 避免过度合并