ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
最终的效果是:你应该更积极进取地分解函数。我们遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中, 并以其用途(而非实现手法)命名。我们可以对一组或甚至短短一行代码做这件事。哪怕替换后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,我 们也该毫不犹豫地那么做。关键不在于函数长度,而在于函数[做什么]和[如何做]之间的语义距离。

百分之九十九的场合里,要把函数变小,只需使用Extract Method(110)。找到函数中适合集在一起的部分,将它们提炼出来形成一个新函数。

如果函数内有大量的参数和临时变量,它们会对你的函数提炼形成阻碍。如果你尝试运用Extract Method(110),最终就会把许多这些参数和临时变量当作参数,传递给被提炼出来的新函数,导致可读性几乎没有任何提升。啊是的,你可以经常运用Replace Temp with Query(120)来消除这些暂时元素。Introduce Parameter Object(295)和Preserve Whole Object(288)则可以将过长的参数列变得更简洁一些。
如果你已经这么做了,仍然有太多临时变量和参数,那就应该使出我们的杀手锏:Replace Method with Method Object(135)。

如何确定该提炼哪一段代码呢?一个很好的技巧是:寻找注解。它们通常是指出[代码用途和实现手法间的语义距离]的信号。如果代码前方有一行注解,就是在提 醒你:可以将这段代码替换成一个函数,而且可以在注解的基础上给这个函数命名。就算只有一行代码,如果它需要以注解来说明,那也值得将它提炼到独立函数 去。
条件式和循环常常也是提炼的信号。你可以使用Decompose Conditional(238)处理条件式。至于循环,你应该将循环和其内的代码提炼到一个独立函数中。
posted on 2005-08-18 14:15 ivaneeo 阅读(389) 评论(0)  编辑  收藏 所属分类: refactoring-从地狱中重生

只有注册用户登录后才能发表评论。


网站导航: