重新组织函数
提炼函数(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; }
试着使用内联函数,可以找出那些有用的间接层,同时将那些无用的间接层去掉。