简化条件表达式
Decompose Conditional(分解条件表达式)
将复杂的条件判断分解为一组简单的函数
动机
- 复杂的条件逻辑是最常导致代码复杂度上升的地点之一。
做法
|
|
Consolidate Conditional Expression(合并条件表达式)
一系列条件测试都得到相同的结果
动机
- 如果有一串条件各不相同的判断,最终结果却一致,则应该将这些条件合并为一个表达式。
- 将检查条件提炼为一个独立函数对于厘清代码意义非常有用,因为它将“做什么”的语句换成“为什么这么做”。
做法
|
|
Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
在条件表达式的每个分支上有着相同的一段代码
动机
- 消除重复代码
做法
|
|
Remove Control Flag (移除控制标记)
在一系列布尔表达式中,某个变量带有控制标记的作用
动机
- 控制标记的频繁使用大大降低了表达式的可读性
- 单一入口原则没有问题,但是单一出口原则可能需要引用讨厌的控制标记
- 使用break,continue和return替换控制标记,会使条件语句清晰很多
做法
Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
函数中的条件逻辑使人难以看清正常的执行路径
动机
- 如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立即从函数中返回。这种单独检查常常被称为”卫语句“
- 卫语句的精髓就是:给某一条分支以特别的重视。
做法
|
|
以多态取代条件表达式
你手上有个条件表达式,它根据对象类型的不同而选择不同的行为
动机
- 在面向对象术语中,听上去最高贵的词非”多态“莫属了。
- 多态最根本的好处是,如果你需要根据对象的不同而采取不同的行为,多态使你不必编写明显的条件表达式。
做法
|
|
Introduce Null Object(引入Null对象)
你需要再三检查某对象是否为null
动机
- 大量的判空逻辑会引入大量的重复代码,空对象的运用,可以摆脱大量过程化的重复代码
- 空对象不会破坏原有系统,空对象一定是常量,可以使用单例创建空对象。
做法
|
|
Introduce Assertion(引入断言)
某一段代码需要对程序状态做出某种假设
动机
- 代码依赖某个条件为真才能运行,如果不为真,则说明程序出现了错误。
- 断言可以作为交流与协调的辅助,帮助理解程序所做的假设和定位bug。