重构手法02:Inline Method (内联函数)
2010-08-02 06:36
295 查看
一个函数调用的本体与名称同样清楚易懂。在函数调用点插入函数体,然后移除该函数。
动机: 有时候你会遇到某些函数,其内部代码和函数名称同样清晰易读。也可能你重构了改函数,使得其内容和其名称变得同样清晰。果真如此,你应该去掉这个函数,直接使用其中的代码。间接性可能带来帮助,但非必要的间接性总是让人不舒服。
另一种需要使用Inline Method (内联函数)的情况是:你手上有一群不甚合理的函数。你可以将它们都内联到一个大型函数中,再从中提炼出合理的小函数。实施Replace Method with Method Object (以函数对象取代函数)之前这么做,往往可以获得不错的效果。你可以把所要的函数的所有调用对象的函数内容都内联到函数对象中。比起既要移动一个函数,又要移动它所调用的其他所有函数,将整个大型函数作为整体来移动比较简单。
如果别人使用了太多间接层,使得系统中所有函数都似乎只是对另一个函数的简单委托,造成在这些委托动作之间晕头转向,那么就使用 Inline Method (内联函数)。当然,间接层有其价值,但不是所有间接层都有价值。试着使用内联手法,可以找出那些有用的间接层,同时将那些无用的间接层去除。
做法:1、检查函数,确定它不具多态性。如果子类继承了这个函数,就不要将此函数内联,因为子类午饭覆写一个根本不存在的函数。
2、找出这个函数的所有被调用点。
3、将这个函数的所有被调用点都替换为函数本体。
4、编译、测试。
5、删除该函数定义。
Inline Method (内联函数)似乎很简单。但情况往往并非如此。对于递归调用、多返回点、内联至另一个对象中而该对象并无提供访问函数……每种情况都可以写上好几页如果遇到这些情况,那么就不应该使用这个手法。
int GetRating() { return MoreThanfiveLateDeliverise() ? 2 : 1; } bool MoreThanfiveLateDeliverise() { return _numberOfLateLiveries > 5; } |
int GetRating() { return _numberOfLateLiveries > 5 ? 2 : 1; } |
另一种需要使用Inline Method (内联函数)的情况是:你手上有一群不甚合理的函数。你可以将它们都内联到一个大型函数中,再从中提炼出合理的小函数。实施Replace Method with Method Object (以函数对象取代函数)之前这么做,往往可以获得不错的效果。你可以把所要的函数的所有调用对象的函数内容都内联到函数对象中。比起既要移动一个函数,又要移动它所调用的其他所有函数,将整个大型函数作为整体来移动比较简单。
如果别人使用了太多间接层,使得系统中所有函数都似乎只是对另一个函数的简单委托,造成在这些委托动作之间晕头转向,那么就使用 Inline Method (内联函数)。当然,间接层有其价值,但不是所有间接层都有价值。试着使用内联手法,可以找出那些有用的间接层,同时将那些无用的间接层去除。
做法:1、检查函数,确定它不具多态性。如果子类继承了这个函数,就不要将此函数内联,因为子类午饭覆写一个根本不存在的函数。
2、找出这个函数的所有被调用点。
3、将这个函数的所有被调用点都替换为函数本体。
4、编译、测试。
5、删除该函数定义。
Inline Method (内联函数)似乎很简单。但情况往往并非如此。对于递归调用、多返回点、内联至另一个对象中而该对象并无提供访问函数……每种情况都可以写上好几页如果遇到这些情况,那么就不应该使用这个手法。
相关文章推荐
- 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构手法——Inline Method
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构--Inline Method(内联函数),Inline Temp(内联临时变量),Substitute Algorithm(替换算法)(五)
- 重构手法03、Inline Temp (内联临时变量)
- 重构手法46:Parameterize Method (令函数携带参数)
- 重构改善既有代码设计--重构手法08:Replace Method with Method Object (以函数对象取代函数)