【代码重构(Refectoring)系列教程】提炼函数法(Extract Method)如何优雅得将代码段提炼成函数?

提炼函数法

●问题

  你有一段可以被整理到一起的代码。

●解决方案

  将这一段代码移动到一个新的函数或方法中,然后以这个方法的调用来代替旧的代码。


Java --重构前代码

void printOwing() {
  printBanner();

  // Print details.
  System.out.println("name: " + name);
  System.out.println("amount: " +  	 getOutstanding());
}

Java --重构前代后

void printOwing() {
  printBanner();
  printDetails(getOutstanding());
}
void printDetails(double outstanding) {
  System.out.println("name: " + name);
  System.out.println("amount: " + outstanding);
}
}


python --重构前代码

def printOwing(self):
    self.printBanner()

    # print details
    print("name:", self.name)
    print("amount:", self.getOutstanding())

python --重构前代后

def printOwing(self):
    self.printBanner()
    self.printDetails(self.getOutstanding())

def printDetails(self, outstanding):
    print("name:", self.name)
    print("amount:", outstanding)

●为何要去重构

  一个方法中的行数越多,你就越难知道这个函数是做什么的。这就是如此重构的主要原因。
  除了消除代码中的这些瑕疵之外,提炼函数法也是其它重构方法之中重要的一个步骤。

●好处

  代码更具可读性!一定要给新方法一个描述这个方法目的的名字,比如createOrder(),renderCustomerInfor()等。
  减少代码重复。通常一个方法中的代码可以被程序中的其它地方复用。因此你可以通过调用新的方法来代替代码中的重复部分。
  隔离代码的独立部分,这使得错误更不容易发生(例如当错误的变量被修改)。

●如何重构

  1. 新建一个方法,给它取一个能够清晰描述方法目的的名字。
  2. 将相关的代码片段拷贝到你的新函数中,将它从原来的位置删除并使用对这个新函数的调用来取代它。
  找到在这个代码片段中的所有使用的变量。如果它们是在代码段中声明的,并且没有在代码段外部使用到,那么就将它们保持不变–它们就会变成这个新的方法中的局部变量。
  3. 如果这些变量在你要提取的片段之前就已经被声明了,你就需要将这些变量传递给你的新的函数的参数来使用者前之前就存在的变量。有时候,通过以查询来代替临时变量法可以消除这些变量。
  4. 如果你注意到一个局部变量以某种方式在提起的代码段中变化,那么这可能以为着这个变化的值在你的主函数中可能之后会被用到。仔细检查一下!如果确实是这种情况,那么就将这个变量的值通过函数返回给主函数来保证功能的正确性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值