6.1 Extract Method(提炼函数)

概括
有一段代码可以被组织在一起并独立出来。
将这段代码放进一个独立函数中,并让函数名称解释该函数的用途。
    例子
void printOwing( double amount){
    printBanner();
     //print details
    System.out.println( "name:"  + _name);
    System.out.println( "amount:"  + amount);
}
         
          重构之后
void printOwing( double amount){
    printBanner();
    printdetails(amount);
}

void printdetails( double amount){
    System.out.println( "name:"  + _name);
    System.out.println( "amount:"  + amount);
}
动机
函数过长或注释很长的代码。
简短命名良好的函数:
  1.  函数的粒度很小时,函数被复用的机会就更大
  2. 会使高层函数读起来就像一系列注释
  3. 函数都是细粒度的,函数的覆盖也更容易些
一个函数多长才算合适:长度不是问题,关键在于函数名称和函数本体之间的语义距离。

做法
。。。

实践
这个重构的难点在于局部变量,包括传进源函数的参数和源函数的参数和源函数所声明的临时变量。

有局部变量
1  局部变量值不变
被提炼代码段只是读取这些变量的值,并不修改他们。
此时,只需简单的将它们当做参数传给目标函数。
2 局部变量再赋值
只讨论临时变量
(1)变量只在被提炼代码段中使用
         只需直接在目标函数中修改它就可以了。
(2)被提炼代码段之后的代码也使用了此变量
         让目标函数返回该变量改变后的值
         如果需要返回的变量不止一个,该怎么做?
              最好的选择通常是:挑选另一块代码来提炼
              最好的选择通常是:挑选另一块代码来提炼
临时变量往往为数众多,甚至会使提炼工作举步维艰。这种情况下,先运用Replace Temp with Query来减少临时变量。如果这么做了提炼依旧困难重重,我就会用Replace Method with Method Object,这个重构手法不在乎代码中有多少临时变量,也不在乎你如何使用它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值