简化条件表达式(Simplifying Conditional Expressions)

1、Decompose Conditional(分解条件式)

  • 从IF、THEN、ELSE三个段落中分别提炼出独立函数。
  • 在带有复杂条件逻辑的函数中,代码(包括检查条件分支的代码和真正实现功能的代码)会告诉你发生的事,但常常让你异不清楚为什么会发生这样的写,这就说明代码的可读性的确大大降低了。
  • 你可以将它分解为多个独立函数。根据每个小块代码的用途,为分解而得的新函数命名。并将原函数中对应的代码替换为(对新建函数的调用),从而更清楚的表达意图。
  • 对于条件逻辑,将每个分支条件分解,形成新函数。

2、Consolidate Conditional Expression

  • 检查条件各不相同,但最终行为一致,使用LOGICAL-AND和lLOGICAL-OR将它们合并为一个条件式。
  • 如果条件彼此独立,不要合并。
  • 合并后的条件实际上只有一次条件检查,只不过有数个并列条件需要检查而已。

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

  • 在条件式的每个分支上有相同的一段代码,将这段代码搬移到条件式之外。
  • 对待异常:如果在TRY区段内可能引发异常的语句之后,以及所有CATCH区段之内,都重复执行了同一段代码,就可以将这段
  • 重复代码移到FINAL区段。

4、Remove Control Flay(移除控制标记)

  • 以BREAK语句或RETURN语句取代控制标记。
  • 在支持BREAK和CONTINUE语句的编程语言中,通常也优先考虑RETURN。

5、Replace Nested Conditional With Guard Clanses

  • 条件式两种:1、所有分支都属于正常行为。2、条件式提供的答案中只有一种是正常行为。
  • 如果两条分支都是正常行为,就使用IF......ELSE。
  • 如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回。
  • 这种有违于“单一入口单一出口”原则,但保持代码清晰才时最关键。

6、Replace Conditional With Polymrphism    以多态取代条件式

  • 对于条件式,根据对象型别的不同而选择不同的行为,将每个分支放进一个subclass覆写函数,将原函数声明为抽象函数。   
  • 如果需要在对象创建好之后修改TYPE CODE,就只能使用STATE/STRATEGY。 
  • 建立继承结构:1、REPLACE TYPE CODE WITH SUBCLASSES。2、REPLACE TYPE CODE WITH STATE/STRATEGY。

7、Introduce Null Object(引入NULL对象)

  • 将NULL VALUE(无效值)替换为NULL OBJECT(无效物)。
  • NULL OBJECTS一定是常量,它们的任何成分都不会发生变化,因此可以使用SINGLETON模式。
  • 为SOURCE CLASS建立一个SUBCLASS为NULL,都有ISNLL()函数,或者建立一个NULLABLE接口,将ISNULL()函数改在其中,SOURCE CLASS实现这个接口。
  • 只有不多数代码都要求NULL OBJECT作出相同响应时,才将行为移到NULL OBJECT中,使用缺省NULL行为。
  • 定义一个NULL接口,什么也不做,NULL OBJEC实现NULL接口,用INSTANCEOF检查是否为空,如:
interface Null{};
class NullObject extends CommonObject implements Null----
aObject instanceOf Null

        好处:不需要修改COMMON OBJECT,无法修改CUSTOMER源码情况下。

  • SPECIAL CASE 模式:包括NULL OBJECT,价值:降低你的错误处理开销。

8.Introduce Assertion(引入断言)

  • 以ASSERTION明确表现这种假设。
  • ASSERTION是一个条件式,应该总是为真。如果失败,表示程序员犯了错误,导致一个UNCHECKED EXPECTION.
  • 不要滥用ASSERTIONS,只使用他来检查一定必须为真的条件。
  • 如果ASSERTIONS所提示的约束条件不能满足,代码仍可以正常运行,就去掉ASSERTIONS。

 

 

 

 

你可能感兴趣的:(编程)