ivaneeo's blog

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

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

作法(Mechanics)

首先是简单情况:

    • 找出只被赋值一次的临时变量==>如果某个临时变量被赋值超过一次,考虑使用Split Temporay Variable(128)将它分割成多个变量.
    • 将该临时变量声明为final.
    • 编译.==>这可确保该临时变量的确只被赋值一次.
    • 将[对临时变量赋值]之语句的等号右侧部分提炼到一个独立函数中.
        • ==>首先将函数声明为private.日后你可能会发现有更多class需要使用它,彼时你可轻易放松对它的保护.
        • ==>确保提炼出来的函数无任何连带影响(副作用),也就是说该函数并不修改任何对象内容.如果它有连带影响,就对它进行Separate Query from Modifier(279).
    • 编译,测试.
    • 在该临时变量身上实施Inline Temp(119).

我们常常使用临时变量保存循环中的累加信息.在这种情况下,整个循环都可以被提炼为一个独立函数,这也使原本的函数可以少掉几行扰人的循环代码.有时候,你可能会用单一循环累加好几个值.这种情况下你应该针对每个累加值重复一遍循环,这样就可以将所有临时变量都替换为查询式(query).当然,循环应该很简单,复制这些代码时才不会带来危险.

运用此手法,呢可能会担心性能问题.和其他性能问题一样,我们现在不管它,因为它十有八九根本不会造成任何影响.如果性能真的出了问题,你也可以在优化时期解决它.如果代码组织良好,那么你往往能够发现更有效的优化法案;如果你没有进行重构,好的优化法案就可能与你失之交臂.如果性能实在太糟糕,要把临时变量放回去也是很容易的.

posted on 2005-08-25 15:04 ivaneeo 阅读(162) 评论(0)  编辑  收藏 所属分类: refactoring-从地狱中重生

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


网站导航: