本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42261333
在上一篇文章中介绍了“提炼函数“。本文将介绍“内联函数”这种重构手法。
下面让我们一起来学习该重构手法把。
开门见山
发现:一个函数的本体与名称同样清楚易懂。
解决:在函数调用点插入函数本体,然后移除该函数。
//重构前
public int getRating(){
return (moreThanSixLateDeliveries()) ? 2 : 1;
}
boolean moreThanSixLateDeliveries(){
return _numberOfLateDeliveries > 6;
}
//重构后
public int getRating(){
return (_numberOfLateDeliveries > 6) ? 2 : 1;
}
动机
重构过程中经常会以简短的函数来表现动作意图,这样就使得代码更清晰易读。但有时你会遇到某些函数,其内部代码和函数名称同样清晰易读。可能你重构了该函数,使得其内容和其名称变得同样清晰。果真如此,你就应该去掉这个函数,直接使用其中的代码。间接性可能会带来一些帮助,但是没有必要的间接性总是让人感觉不舒服。
还有一种情况是:你手上有一群组织不甚合理的函数。你可以将它们都内联到一个大型函数中,再从中提炼出组织合理的小型函数。比起既要移动一个函数、又要移动它所调用的其它所有函数,将整个大型函数作为整体来移动会比较的简单。
如果你发现代码中使用了太多的间接层,使得系统中的所有函数都似乎只是对另一个函数的简单委托,造成对被些委托动作弄的晕头转向,这时通常也会使用内联函数。
做法
内联函数看起来似乎很简单。但情况往往那并非如此。对于递归调用、内联至另一个对象中而该对象并无提供访问函数......每一种情况都会很复杂。不介绍复杂情形是因为:如果你遇到了这样复杂的情形,那么就不该运用这种重构手法。
本文主要介绍了重构手法——内联函数,该手法处理起来比较简单,说白了就是消除一个函数,并将其中的代码移动到用到该函数的地方。虽然手法比较简单,但是在开发的过程中还是会经常使用到该手法。希望本文对你有所帮助。有问题可以留言,谢谢。(PS:下一篇将介绍重构笔记——内联临时变量)