重构第九章
5.Replace Nested Conditional With Guard Clauses(以卫语句取代嵌套条件式)
函数中的条件逻辑使人难以看清正常的执行路径。使用卫语句表现所有特殊情况
Example:
double getPayAmount() {
double result;
if(_isDead) {
result = deadAmount();
} else {
if(_isSeparated) {
result = separatedAmount();
} else {
if(_isRetired) {
result = retiredAmount();
} else {
result = normalPayAmount();
}
}
}
}
Analyse:
卫语句:如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真的时候从函数中返回。
Replace Nested Conditional With Guard Clauses(以卫语句取代嵌套条件式)的精髓是:给某一条分支以特别的重视。如果使用if-then-else结构,你对if分支和else分支的重视是同等的。而卫语句不同,它表现出来:这种情况很罕见,如果它真的发生了,请做一些必要的整理工作,然后退出。
And:
double getPayAmount() {
double result;
if(_isDead) return deadAmount();
if(_isSeparated) return separatedAmount();
if(_isRetired) return retiredAmount();
return normalPayAmount();
}
Conclusion:
Replace Nested Conditional With Guard Clauses(以卫语句取代嵌套条件式)使得阅读者不在去看没有用到的else区段,提高程序的清晰度
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论