重新组织函数

提炼函数(Extract Method)

你有一段代码可以被组织在一起并独立出来,将代码放进一个独立函数中,并让函数名称解释该函数的用途。

void printOwing(double amount) {  
    printBanner();  
      
    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);  
} 

当看见一个过长的函数或者一段需要注释才能让人理解用途的代码,就可以将这段代码放进一个独立的函数中。

如果每个函数的粒度都很小,那么函数被复用的机会就更大;
其次,这会使高层函数读起来就像一系列注释;
再次,如果函数都是细粒度,那么函数的覆写也会更容易些。
函数命名以它做什么来命名,而不是以它怎么做命名,关键在于函数名称和函数体之间的语义距离。
即使想要提炼的代码非常简单,例如只有一条消息或一个函数调用,只要新函数的名称能够以更好的方式昭示代码意图,也应该提炼它。

内联函数(Inline Method)

一个函数的本体与名称同样清楚 易懂,在函数调用点插入函数本体,然后移除该函数。

int getRating() {  
    return (moreThanFiveLateDeliveries()) ? 2 : 1;   
}  
  
boolean moreThanFiveDeliveries() {  
    return numberOfLateDeliveres > 5;  
}  

转换为:

int getRating() {  
    return (numberOfLateDeliveries > 5) ? 2 : 1;  
}  

试着使用内联函数,可以找出那些有用的间接层,同时将那些无用的间接层去掉。

 

posted @ 2017-09-23 12:04  小路不懂2  阅读(194)  评论(0编辑  收藏  举报