改善既有代码的设计》之一 重新组织你的函数(2)

状况:我看见一个过长的函数或者需要一段注释才能让人理解用途的代码,那么将这段代码放进一个独立函数中,并让函数名称解释改函数的用途。

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

动机:

简短而有良好命名的函数:——finely grained

  1、复用机会大。

  2、函数读起来像读一系列comments。

  3、函数覆写容易。

重点:函数长度关键在于函数名称和函数本体之间的语义距离。如果提炼动作可以强化代码的清晰度,那么就去做。

作法:

  1、创建新函数,根据函数的意图命名——以它“做什么”命名,而不是以它“怎样做”命名。

    =》 即使Extract Function 非常简单,例如只是消息或函数调用,只要新Function能够以更好方式昭示代码意图,你也应该提炼它。但如果你想不出更有意义的名称,就别动它。

  2、将Extract的代码从Source Function 中Move到New Function中。

二、Inline Method

  Method Body与Method Name一样清晰易懂的时候,请Inline Method。

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

三、Inline Temp

一个临时变量,只被一个简单表达式赋值一次,而且赋值完也只使用了一次。——请Inline Temp

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

四、Replace Temp with Query

如果一个Temp变量,保存一个表达式,将这个表达式Extract Method。——这就是所谓的查询式,query

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

动机:

  1、局部变量会使代码难以提炼。

  2、临时变量会驱使你写出更长的代码。如果改成query method,那么class下的method,都可以获得这份信息。——将编写出更清晰的代码。

  3、Replace Temp with Query往往是你运用Extract Method之前必不可少的步骤。

作法:

  1、找出只被赋值一次的临时变量。

    =>  如果临时变量赋值超过一次,考虑使用Split Temporary Variable将它分割成多个变量。

  2、对Temp Variable赋值的右侧部分,Extract到一个独立函数中。

   =>  将Method声明为private,日后如果有其他class用的时候再放开它(public或protected)。

  

如果代码组织良好,那么你往往能发现更有效的优化方案。————如果性能真的很糟糕,那么放回去也很容易。

 

五、Introduce Explaining Variable

 

将复杂表达式中(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

 

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

 

动机:

  表达式复杂而且难以阅读。在这种情况下,临时变量可以帮助你将表达式分解为比较容易管理的形式。

  

 六、Split Temporator Variable

 

 某个临时变量被赋值超过一次,它既不是循环变量,也不是集合变量。那么针对每次赋值,创造一个独立的,对应的临时变量。

改善既有代码的设计》之一 重新组织你的函数

 

改善既有代码的设计》之一 重新组织你的函数

动机:

  1、如果临时变量承担多个责任,它就应该被替换为多个临时变量。每个变量只承担一个责任。

  2、同一个临时变量承担两件不同的事情,会令review变得糊涂。

六、Remove Assignments To Parameters

如果你的代码对参数进行赋值,那么以一个临时变量取代该参数的位置

 

改善既有代码的设计》之一 重新组织你的函数

改善既有代码的设计》之一 重新组织你的函数

七、Replace Method with Method Object

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

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