重构研究:Extract Method(提炼函数)

动机:

如果看到一个过长的函数或者函数中有一段代码需要注释时,就需要用Extract Method。

Extract Method完后的好处:第一,函数的粒度变得很小,这样被复用的机会就更大;第二,使用调用函数读起来像是看一系列的注释一样;第三,如果函数的粒度很小,那这样修改就会变得更容易。

注意事项,提炼出来的函数名称一定要能表达这个函数的功能,即这是“做什么的”,这样让调用函数的人可以一目了然。

做法:

本处采用Eclipse自动提炼工具

选中要提炼的代码块,右键“Refactor” -> “Extract Method”,弹出如下窗口

在“Method name”处写入新的函数名,按“OK”,生成新的函数

注意事项:

如果碰到有局部变量的函数,有以下几种情况:

1.局部变量只是做为参数传进子函数,并没有在子函数内容对参数进行附值,就不需要管他们

2.如果有在子函数内部对参数进行赋值,那就先使用Remove Assingments to Parameters(移除参数赋值)

3.如果参数在子函数之后还有调用,而在子函数中又对参数进行了修改,那就要在子函数返回改变后的值,再在主函数中对参数赋值

举个例子:

 

 1     private void printOwing(double previousAmount) {
 2         Enumeration<Order> e = orders.elements();
 3         
 4         double outstanding = previousAmount * 1.2;
 5         
 6         while(e.hasMoreElements()) {
 7             Order each = e.nextElement();
 8             outstanding += each.getAmount();
 9         }
10         
11         printDetails(outstanding);
12     }

重构后的代码为:

 1     private void printOwing(double previousAmount) {
 2         double outstanding = previousAmount * 1.2;
 3         
 4         outstanding = getOutstanding(outstanding);
 5         
 6         printDetails(outstanding);
 7     }
 8     
 9     private double getOutstanding(double initialValue) {
10         double result = initialValue;
11         
12         Enumeration<Order> e = orders.elements();
13         
14         while(e.hasMoreElements()) {
15             Order each = e.nextElement();
16             result += each.getAmount();
17         }
18         
19         return result;
20     }

 

posted on 2012-07-28 11:43  低调点  阅读(386)  评论(0)    收藏  举报

导航