首页 > 代码库 > 重构笔记——内联函数

重构笔记——内联函数

    本文是在学习中的总结,欢迎转载但请注明出处: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;
		}


动机

        重构过程中经常会以简短的函数来表现动作意图,这样就使得代码更清晰易读。但有时你会遇到某些函数,其内部代码和函数名称同样清晰易读。可能你重构了该函数,使得其内容和其名称变得同样清晰。果真如此,你就应该去掉这个函数,直接使用其中的代码。间接性可能会带来一些帮助,但是没有必要的间接性总是让人感觉不舒服。

        还有一种情况是:你手上有一群组织不甚合理的函数。你可以将它们都内联到一个大型函数中,再从中提炼出组织合理的小型函数。比起既要移动一个函数、又要移动它所调用的其它所有函数,将整个大型函数作为整体来移动会比较的简单。

        如果你发现代码中使用了太多的间接层,使得系统中的所有函数都似乎只是对另一个函数的简单委托,造成对被些委托动作弄的晕头转向,这时通常也会使用内联函数。


做法

(1)检查函数,确定其不具有多态性。(如果子类继承了这个函数,就不要将此函数内联,因为子类无法复写一个根本不存在的函数)。
(2)找出这个函数的所有被调用点。
(3)将这个函数的所有被调用点都替换为函数本体。
(4)编译,测试。
(5)一切正常后,删除该函数的定义。

        内联函数看起来似乎很简单。但情况往往那并非如此。对于递归调用、内联至另一个对象中而该对象并无提供访问函数......每一种情况都会很复杂。不介绍复杂情形是因为:如果你遇到了这样复杂的情形,那么就不该运用这种重构手法。



        本文主要介绍了重构手法——内联函数,该手法处理起来比较简单,说白了就是消除一个函数,并将其中的代码移动到用到该函数的地方。虽然手法比较简单,但是在开发的过程中还是会经常使用到该手法。希望本文对你有所帮助。有问题可以留言,谢谢。(PS:下一篇将介绍重构笔记——内联临时变量)


重构笔记——内联函数