文章内容和思路来自《重构-改善既有代码的设计》
1> 分解条件表达式:对于条件逻辑,将每个分支条件分解成新函数还可以带来更多好处:可以突出条件逻辑,更清晰地表达每个分支的作用,并且突出每个分支的原因
2> 合并条件表达式:检查条件各不相同,最终行为却一致
3> 以卫语句取代嵌套条件表达式:给某一条分支以特别的重;如果使用if-then-else结构,你对if分支和else分支的重视是等同的;这样的代码结构传递给阅读者的消息就是:各个分支有同样的重要性;卫语句就不同了,它告诉阅读者:这种情况不是 本函数的核心逻辑所关心的,如果它真的发生了,请做一些必要的整理工作然后退出
4> 以多态取代条件表达式:多态是面向对象编程的关键特性之一;跟其他一切有用的特性一样,它也很容易被滥用。我曾经遇到过有人争论说所有条件逻辑都应该用多态取代;我不赞同这种观点;我的大部分条件逻辑只用到了基本的条件语句(if-else/switch-case),并不需要劳师动众地引入多态;但如果发现如前所述的复杂条件逻辑,多态是改善这种情况的有力工具
5> 引入特例:一种常见的重复代码是这种情况:一个数据结构的使用者都在检查某个特殊的值,并且当这个特殊值出现时所做的处理也都相同;如果我发现代码库中的多处以同样的方式应对同一个特殊值,我就会想要把这个处理逻辑收拢到一处;处理这种情况的一个好办法就是使用“特例”模式:创建一个特例元素,用以表达对这种特例的共用行为的处理;这样我就可以用一个函数调用取代大部分特例检查逻辑
6> 引入断言:常常会有这样一段代码:只有当某个条件为真时,该段代码才能正常运行;例如,平方根计算只对正值有效;这样的假设通常并没有在代码中明确的表现出来,你必须阅读整个算法才能看出;有时程序员会以注释的方式写这种假设,而我要介绍的是一种更好的技术(使用断言明确标明这些假设)