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

本文探讨了在编程中如何通过将临时变量替换为查询来改善代码的清晰度和可读性。首先解释了临时变量可能导致函数过长的问题,接着详细介绍了替换过程:找出只赋值一次的临时变量,将其声明为final,提炼为无副作用的查询函数,最后通过内联临时变量完成转换。文中还给出了具体的范例步骤,指导开发者实践这一重构技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动机

临时变量的问题在于:它们是暂时的,而且只能在所属函数内使用。由于临时变量只在所属函数内可见,所以它们会驱使你写出更长的函数,因为只有这样你才能访问到需要的临时变量。如果把临时变量替换为一个查询,那么同一个类中的所有函数都将可以获得这份信息。这将带给你极大帮助,使你能够为这个类编写更清晰的代码。

做法

  1. 找出只被赋值一次的临时变量(如果某个临时变量被赋值超过一次,考虑使用Split Temporary Variable,将它分割成多个变量)。
  2. 将该临时变量声明为final。
  3. 编译(这可确保该临时变量的确只被赋值一次)。
  4. 将“对该临时变量赋值”之语句的等号右侧部分提炼到一个独立函数中。
    4.1 首先将函数声明为private。日后你可能会发现有更多类需要使用它,那时放松对它的保护也很容易。
    4.2 确保提炼出来的函数无副作用,也就是说该函数并不修改任何对象内容。如果它有副作用,就对它进行Separate Query from Modifyer。
  5. 编译,测试。
  6. 在该临时变量身上实施Inline Temp

范例

double getPrice() {
   
	int basePrice = _quantity * _itemPrice;
	double discountFactor;
	if (basePrice > 1000) discountFactory = 0.95;
	else discountFactor = 0.98;
	return basePrice * discountFactor;
}

先将临时变量声明为final,检查它们是否的确只被赋值一次。

double getPrice() {
   
	final int basePrice = _quantity * _itemPrice;
	final double discountFactor;<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值