您的位置:首页 > 产品设计 > UI/UE

6.4 Replace Temp with Query(以查询取代临时变量)

2013-11-27 13:45 495 查看
概括
以一个临时变量保存某一个表达式的运算结果。
将这个表达式提炼到一个独立函数汇总。将这个临时变量的所有引用点替换为对新函数的调用。此后,新函数就可被其它函数使用。
例子
double basePrice = _quantity * _itemPrice;
if(basePrice > 1000)
return basePrice*0.95;
else
return basePrice*0.5;

重构后
if(basePrice() > 1000)
return basePrice()*0.95;
else
return basePrice()*0.5;
...
double basePrice(){
return  _quantity * _itemPrice;
}
动机[/b] 临时变量的问题:临时变量只能在所属函数内使用,驱使你写出更长的函数来访问到需要的临时变量。
如果把临时变量替换为一个查询函数,那么同一个类中的所有函数都可以获得这份信息。这会使你能够问这个类编写更为清晰地代码。
Replace Temp with Query往往是你运用Extract Method之前必不可少的一个步骤。局部变量会使得代码难以被提炼,所以你应该尽可能把它们替换为查询式。
简单情况:临时变量只被赋值一次,或者赋值给临时变量的表达式不受其他条件影响。
复杂情况:可能需要先运用Split Temporary Variable或Seperate Query from Modifier使情况变得简单一些。
如果你想替换的临时变量是用来收集结果的(例如循环中的累加值),就需要将某些程序逻辑(如循环)复制到查询函数中。做法[/b].实践[/b]我们常常使用临时变量保存循环中的累加信息。此时,真个循环都可以被提炼为i一个独立函数。
运用此手法,可能会带来性能问题。和其他性能问题一样,我们现在不管它,因为它十有八九不会造成任何影响。若性能真出了问题,你也可以在优化时期解决它。
组织良好的代码往往能发现更有效的优化方案。
如果性能是在太糟糕,要把临时变量放回去也很容易。

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: