`
weihe6666
  • 浏览: 430235 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

重构,简化条件表达式

 
阅读更多
重构,简化条件表达式

重构一书,早就在手,只是一直没有细细品味,对于堪称经典之书,除了瞻仰之外,不敢评论,但是这本书确实通俗易懂,利用小的改动,让你的代码逻辑更清晰,可阅读行更高等。

重构的工作是建立在有良好测试环境的基础上进行,没有测试做保障,如何才能知道自己的重构不会改变程序原来的逻辑,单元测试是重构的基础,目前我用的是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();


分享到:
评论

相关推荐

    PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式

    条件逻辑有可能十分复杂,因此本章提供一些重构的手法,专门用来简化它们

    重构-改善既有代码的设计

    重构 改善既有代码的设计目录 ...第9章 简化条件表达式 237 第10章 简化函数调用 271 第11章 处理概括关系 319 第12章 大型重构 359 第13章 重构,复用与现实 379 第14章 重构工具 401 第15章 总结 409

    重构—改善既有代码的设计

    6、4简化条件表达式(SimplifyingConditionalExpressions) 6、5简化函数呼叫(MakingMethodCallsSimpler) 6、6处理概括关系(DealingwithGeneralization) 7、大型重构(BigRefactorings) 8、重构、...

    重构-改善既有代码的设计(chm清晰版)

    作者:Martin Fowler,Kent Beck,John Brant ,William Opdyke ...章节九 简化条件表达式 章节十 简化函数调用 章节十一 处理概括关系 章节十二 大型重构 章节十三 重构,复用与现实 章节十四 重构工具 章节十五 集成

    重构_改善既有代码的设计

    第 9 章:简化条件表达式(Simplifying Conditional Expressions) 第 10 章:简化函数调用(Making Method Calls Simpler) 第 11 章:处理概括关系(Dealing with Generalization) 第 12 章:大型重构...

    重构:改善既有代码的设计(中文高清版)

    第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 ...

    重构:改善既有代码的设计(中文版).

    第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 ...

    重构_改善既有代码的设计.pdf

    第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 ...

    重构:改善既有代码的设计.[美]Martin Fowler.epub【文字版手机格式】

    第9章 简化条件表达式 9.1 Decompose Conditional(分解条件表达式) 9.2 Consolidate Conditional [removed]合并条件表达式) 9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 9.4 Remove ...

    《重构改善既有代码的设计(2010年版)》(Martin Fowler[美] 著,熊节 译)

    第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 ...

    重构-改善既有代码的设计 中文版.pdf

    第9章 简化条件表达式 9.1 Decompose Conditional(分解条件式) 9.2 Co olidate Conditional Expression(合并条件式) 9.3 Co olidate Duplicate Conditional Fragments (合并重复的条件片段) 9.4 Remove ...

    重构-改善既有代码的设计.pdf

    重构-改善既有代码的设计 简化函数表达式 简化函数调用

    代码的重构

    重构(讲解,案例),对象与对象之间移动特性,重构数据,简化表达式,函数的调用,大型重构,集成等。

    重构-改善既有代码的设计 中文版

    第9章 简化条件表达式 9.1 Decompose Conditional(分解条件式) 9.2 Co olidate Conditional Expression(合并条件式) 9.3 Co olidate Duplicate Conditional Fragments (合并重复的条件片段) 9.4 Remove ...

    重建——改善既有代码的设计

    第9章 简化条件表达式237 9.1 DecomposeConditional(分解条件表达式)238 9.2 ConsolidateConditionalExpression(合并条件表达式)240 9.3 ConsolidateDuplicateConditionalFragments(合并重复的条件片段)243 ...

Global site tag (gtag.js) - Google Analytics