改善既有代码的设计》之四 简化条件表达式

思维导图
点击下图,查看大图。


 介绍

 

 条件逻辑有可能十分复杂,因此本章提供一些重构的手法,专门用来简化它们。

 

全文简述(你可直接跳过下面的内容)

  核心重构:Decompose Conditional——分离”转辙逻辑“(switching logic)和”操作细节“(details)分离。

  多处测试有相同结果:Consolidate Conditional Expresssion

  条件代码中去掉重复成分:Consolidate Duplicate

  标识特殊情况:Replace Nested Conditional with Guard Clauses

  去除讨厌的控制标记:Remove Control Flag

 

 

 专业术语

 

decompose:分解,分离

consolidate:合并

eligible:合适的,合格的

fragment:碎片,片段

nest:嵌套

guard:保卫

clause:从句

polymorphism:多态

assertion:断言

unchecked exception:不可控异常

 

 Decompose Conditional

 

状况:你有一个复杂的条件(if-else if-else)语句,那么从if、else if、else三个段落中分别提炼出函数。

 Consolidate Conditional Expression

 

状况:你有一些条件测试,都得到相同的结果,那么将这些测试合并为一个条件式,并将这个条件提炼称为一个独立的函数。

动机: 1、合并后的条件代码会告诉你“实际上只有一次条件检查,只不过有数个并列条件需要检查而已“,——使检查的用意更清晰。

     2、为Extract Method做好准备。——将检查条件提炼成一个独立函数,对于理清代码意义非常有用。它把描述“做什么”的语句换成了“为什么这样做”。

条件语句的“合并理由”也同时指出了“不要合并”的理由:如果你认为你的这些检查的确彼此独立,的确不应该被视为同一次检查,那么就不要使用本项重构。因为在这种情况下,你的代码已经清楚表达出自己的意义。

 Consolidate Duplicate Conditional Fragments

 

状况:在条件式的每个分支上有着相同的一段代码,那么将这段重复代码搬移到条件之外。

 

 

 Remove Control Flag

 

状况:在一系列布尔表达式中,某个变量带有“控制标记”的作用,那么以break语句或return语句取代控制标记。

 

 

 

 

 Replace Nested Conditional with Guard Clauses

 

状况:函数中的条件逻辑使人很难看清正常的执行路径,那么使用卫语句(Guard Clauses)表现所有特殊情况。


条件式的两种形式:

  1、所有分支都属于正常行为:使用[if ... else..]

  2、条件式极其罕见:应该单独检查该条件,并在该条件为真时,立刻从函数中返回。——这样的单独检查常常被称为”卫语句“

Replace Nested Conditional with Guard Clauses精髓:给某一分支以特别重视。

 

 Replace Conditional with Polymorphism

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e9add83248766e79fd64096efde87327.html