重构条件逻辑
基本重构策略
1. 简化条件表达式
// 重构前
bool isValidUser(User* user) {
if (user!= nullptr) {
if (user->isActive()) {
if (user->hasPermission()) {
return true;
}
}
}
return false;
}
// 重构后
bool isValidUser(User* user) {
return user && user->isActive() && user->hasPermission();
}
重构技术
提前返回模式
// 复杂的嵌套条件
int processTransaction(Transaction* tx) {
if (tx == nullptr) {
return ERROR_NULL_TRANSACTION;
}
if (!tx->isValid()) {
return ERROR_INVALID_TRANSACTION;
}
if (tx->getAmount() <= 0) {
return ERROR_INVALID_AMOUNT;
}
// 处理成功的交易
return processSuccessfulTransaction(tx);
}
条件简化方法
技术 |
描述 |
示例 |
短路求值 |
使用逻辑运算符减少检查 |
if (ptr && ptr->method()) |
三元运算符 |
简化简单的条件赋值 |
result = (condition)? value1 : value2 |
查找表 |
用映射替换复杂的条件语句 |
std::map<int, Action> |
Mermaid流程图:重构过程
graph TD
A[识别复杂条件语句] --> B{是否有多个嵌套条件?}
B --> |是| C[应用提前返回]
B --> |否| D[简化逻辑表达式]
C --> E[减少嵌套]
D --> F[使用逻辑运算符]
E --> G[提高代码可读性]
F --> G
高级重构技术
状态模式实现
class UserState {
public:
virtual bool canPerformAction() = 0;
};
class ActiveUserState : public UserState {
public:
bool canPerformAction() override {
return true;
}
};
class BlockedUserState : public UserState {
public:
bool canPerformAction() override {
return false;
}
};
性能考量
- 降低计算复杂度
- 最小化分支
- 提高代码可维护性
- 在LabEx开发环境中增强可读性
常见重构陷阱
- 过度设计解决方案
- 丢失原始意图
- 创建不必要的抽象
- 忽略性能影响
实际优化示例
// 复杂的条件逻辑
double calculateDiscount(Customer* customer, double amount) {
double discount = 0.0;
if (customer->isPreferred()) {
if (amount > 1000) {
discount = 0.15;
} else if (amount > 500) {
discount = 0.10;
}
}
return amount * (1 - discount);
}
// 重构版本
double calculateDiscount(Customer* customer, double amount) {
static const std::map<double, double> discountTiers = {
{1000, 0.15},
{500, 0.10}
};
if (!customer->isPreferred()) return amount;
for (const auto& [threshold, rate] : discountTiers) {
if (amount > threshold) return amount * (1 - rate);
}
return amount;
}
要点总结
- 优先考虑代码清晰度
- 有效使用逻辑运算符
- 适当时实现设计模式
- 持续重构并改进代码结构