09 简化条件表达式

Wu Jun 2019-03-22 22:09:09
13 重构 > 1 重构-改善既有代码的设计

1 Decompose Conditional (分解条件表达式)

你有一个复杂的条件 (if-then-else) 语句。
从 if,then,else 三个段落中分别提炼出独立函数。

动机

增加可读性

2 Consolidate Conditional Expression (合并条件表达式)

你有一系列条件测试,都得到相同结果。
将这些测试合并为一个条件表达式,并将这个条件表达式提炼成为一个独立函数。

动机

如果你认为这些检查的确彼此独立,那么就不要使用本项重构

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

在条件表达式的每个分支上有着相同的一段代码。
将这段重复代码搬移到条件表达式之外。

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

在一系列布尔表达式中,某个变量带有“控制标记”(control flag)的作用。
以 break 语句或 return 语句取代控制标记。

5 Replace Nested Conditional with Guard Clauses (以卫语句取代嵌套条件表达式)

函数中的条件逻辑使人难以看清正常的执行路径。
使用卫语句表现所有特殊情况。

动机

保持代码清晰才是最关键的:如果单一出口能使这个函数更清楚易读,那么就使用单一出口;否则就不必这么做。

6 Replace Conditional with Polymorphism (以多态取代条件表达式)

你手上有个条件表达式,它根据对象类型的不同而选择不同的行为。
将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数。

动机

使用条件表达式时,如果你想添加一种新类型,就必须查找并更新所有条件表达式。但如果改用多态,只需建立一个新的子类,并在其中提供适当的函数就行了。

7 Introduce Null Object (引入 Null 对象)

你需要再三检查某对象是否为null。
将null值替换为null对象。

做法

null对象实现isNull()方法

8 Introduce Assertion (引入断言)

某一段代码需要对程序状态做出某种假设。
以断言明确表现这种假设。