[align=center][size=xx-small][b]重构,简化条件表达式[/b][/size][/align]
重构一书,早就在手,只是一直没有细细品味,对于堪称经典之书,除了瞻仰之外,不敢评论,但是这本书确实通俗易懂,利用小的改动,让你的代码逻辑更清晰,可阅读行更高等。
重构的工作是建立在有良好测试环境的基础上进行,没有测试做保障,如何才能知道自己的重构不会改变程序原来的逻辑,单元测试是重构的基础,目前我用的是gtest单元测试框架。
本文记录简化条件表达式重构方法:
1.分解条件表达式
从if、then、else中三个段落中提炼独立函数。
经过提炼之后:
针对重构前和重构后,可以看出,重构后的可读性更高,不至于如重构前看到if语句里的表达式要思考一会才会明白,这种小的提炼积少成多,对整个代码的风格和代码的可读性带来巨大的改变。
2.合并表达式
当一连串条件检查:检查条件各不相同,但是结果却是一样,此时,就应该用“&&”、“||”将他们合并为一个条件表达式。
重构后:
3. 合并重复的条件片段
在条件表达式的每一个分支上有着相同的一段代码,这是就要注意把他们移到条件表达式之外。
重构后:
重构一书,早就在手,只是一直没有细细品味,对于堪称经典之书,除了瞻仰之外,不敢评论,但是这本书确实通俗易懂,利用小的改动,让你的代码逻辑更清晰,可阅读行更高等。
重构的工作是建立在有良好测试环境的基础上进行,没有测试做保障,如何才能知道自己的重构不会改变程序原来的逻辑,单元测试是重构的基础,目前我用的是gtest单元测试框架。
本文记录简化条件表达式重构方法:
1.分解条件表达式
从if、then、else中三个段落中提炼独立函数。
if(date.before(SUMMER_START) || date.after(SUMMER_END)) {
charge = quantity * _winterRate + _winterServiceChange;
}else charge = quantity * _summerRate;
经过提炼之后:
if(notSummer(date)) {
charge = winterCharge(quantity);
else charge = summerCharge(quantity);
针对重构前和重构后,可以看出,重构后的可读性更高,不至于如重构前看到if语句里的表达式要思考一会才会明白,这种小的提炼积少成多,对整个代码的风格和代码的可读性带来巨大的改变。
2.合并表达式
当一连串条件检查:检查条件各不相同,但是结果却是一样,此时,就应该用“&&”、“||”将他们合并为一个条件表达式。
double disabilityAmount() {
if(_seniority < 2) return 0;
if(_monthsDisabled > 12) return 0;
if(_isPartTime) return 0;
重构后:
double disabilityAmount() {
if(isNotEligibleForDiasbility()) return 0;
3. 合并重复的条件片段
在条件表达式的每一个分支上有着相同的一段代码,这是就要注意把他们移到条件表达式之外。
if(isSpecialDeal()) {
total = price * 0.95;
send();
else
total = price * 0.98;
send();
重构后:
if(isSpecialDeal()) {
total = price * 0.95;
else
total = price * 0.98;
send();