代码重构 之 条件转换
代码重构的目的是让代码更赏心悦目.
代码重构的方法是等价变换, 也就是使用等价的代码来替换原来的代码.
条件转换是代码重构的一种常用方法, 即条件语句与条件表达式的相互转换.

逻辑与
逻辑与表达式 a && b 等价于 两个嵌套的 if 语句, 其中a和b是任意表达式


逻辑或
逻辑或表达式 a || b 等价于 两个并列的 if 语句, 其中a和b是任意表达式

注意 : 第2个 if 语句属于第一个 if 语句的 else 部分!

逻辑非
逻辑非表达式 !a 等价于 if (a) 的 else

通常不需要将逻辑非表达式转换为 if ... else ... 的形式, 但是从 if ... else ...的形式转为 逻辑非表达式的情况是常见的, 比如:


使用条件
如果 a 或者 b 是很复杂的表达式, 那么可以考虑转换成两个嵌套 if 语句的代码 ; 如果 a 和 b 都是很简单的表达式, 那么可以考虑转换成一个 逻辑运算符连接的表达式.

顺序 if 语句
如果有多个顺序执行的 if 语句, 那么可以使用 循环语句来重构这些 if 语句, 也就是用函数来封装各个要执行的语句, 然后循环遍历每个条件来执行该条件对应的函数.


每个条件对应的要执行的语句分别创建一个函数

最后修改成的代码如下:

这种方式看起来复杂, 但是却很容易扩展, 只需要添加一个函数, 然后增加表conditions的元素就行了. 举个例子, 要做很多个单元测试(测试代码是否有bug), 那么要测试某个函数, 只需要把它对应的条件设为true, 就会自动执行这个函数; 条件设为false, 则不会测试那个函数.
各个函数的参数不同怎么办呢 ? 对每个不同参数的函数建立一个 void () 的函数来调用它就行了.
注意 : 如果顺序执行的 if 语句中间还有其他代码, 那么通常不能用这种方法替换, 因为中间的代码可能影响后面的 if 语句. 解决方法是 : 把这段中间的代码也看成一个 if (true) 的语句, 把它也加入到表中.