第九章 简化条件表达式 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(断言)明确表现这种假设。