第九章 简化条件表达式

来源:互联网 发布:2016年中国进口数据 编辑:程序博客网 时间:2024/04/28 21:01

第九章 简化条件表达式 Simplifying Conditional Expressions

 

9.1   Decompose Conditional(分解条件式)

症状:你有一个复杂的条件(if-then-else)语句

解决办法:从if-then-else三个段落中分别提炼出独立函数。

 

9.2   Consolidate Conditional Expression(合并条件式)

症状:你有一系列条件测试,都得到相同结果。

解决办法:将这些测试合并为一个条件式,并将这个条件式提炼成为一个独立函数。

double disabilityAmount()

{

if(_seniority < 2) return 0;

if(_monthsDisabled < 2) return 0;

if(_isPartTime< 2) return 0;

}

 

double disabilityAmount()

{

if(isNotEligableForDisability) return 0;

}

 

9.3   Consolidate  Duplicate Conditional Fragments(合并重复的条件片段)

症状:在条件式的每个分支上都有着相同的一段代码

解决办法:将这段重复代码搬移到条件式外。

 

if(A)

{

total = price;

send();

}

else

{

total = price*0.9;

send();

}

 

if(A)

{

total = price;

}

else

{

total = price*0.9;

}

send();

 

9.4   Remove Control Flag(移除控制标记)

症状:在一系列布尔表达式(boolean expressions)中,某个变量带有控制标记(control flag)的作用。

解决办法:以break语句或return语句取代控制标记。控制标记(例如if判断,或者while等等)

 

9.5   Replace Nested Conditional with Grard Clauses(以卫语句取代嵌套条件式)

症状: 函数中的条件逻辑(conditional logic)使人难以看清正常的执行路径。

解决办法:使用卫语句表现所有特殊情况。

将if else if else复杂的嵌套用if if if来代替

 

9.6   Replace Conditional with Polymorphism(以多态取代条件式)

症状:你手上有个条件式,它根据对象型别的不同而选择不同的行为。

解决办法:将这个条件式的每个分支放进一个subclass内的覆写函数中,然后将原始函数声明为抽象函数(abstract method)。

 

9.7   Introduce Null Object(引入Null对象)

症状:你需要再三检查(某物是否为null value)

解决办法:将null value(无效值)替换为null object(无效物)

 

9.8   Introduce Assertion(引入断言)

症状:某一段代码需要对程序状态(state)做出某种假设

解决办法:以assertion(断言)明确表现这种假设。