《重构 改善既有代码的设计》:6.重新组织代码【6.6分解临时变量】-Split Temporary Valiable(128)

假如现在有这样一段代码:

double temp = 2 * (height + weight);
System.out.println("周长是" + temp);
temp = height * weight;
System.out.println("面积是" + temp);

看到这段代码,如果不是看汉字注释,是不是很不容易想起来每个公式干嘛的。我们现在就产生想要重构的冲动。
将每个变量都声明为“见名知其意”的临时变量,修改后的代码如下:

double circumference = 2 * (height + weight);
System.out.println("周长是" + circumference);
double area = height * weight;
System.out.println("面积是" + area);

一、变量

临时变量有那么几种用途:

  • 循环变量,比如for(int i = 0; i < 100; i++) 中的i就属于循环变量。i++也属于结果收集变量。
  • 结果收集变量,对某个结果进行多次累计收集。
  • 临时存储某个值,比如某个变量用于存储某个计算过程得到的结果,供未来的使用。

分解临时变量的原则是:

  1. 在待分解的临时变量声明处,修改其名字,并用final进行修饰。
  2. 已该临时变量所在的饿第二次赋值为修改点,修改之前对该临时变量的引用,指向新的名称。
  3. 在第二个声明处,重新声明该变量,并将引用该变量的饿地方修改为新声明的变量。
  4. 循环1、2、3直到所有的变量分解完成。

下面是个例子代码,我们一步步修改:

double getCalculateResult(int times) {
    int initialValue = 100;
	double average = initialValue / time;
	double result = 0.0;
	if (time > 0) {
	  	double redouble = average * i;
	  	average = (redouble + i * i)/i;
	  	result += average * (i-1);
	}
	return result;
}

第一步:现在average变量被重复使用了,我们将average重新定义为:primaryAverage.修改后的代码如下:

double getCalculateResult(int times) {
    int initialValue = 100;
	final double primaryAverage = initialValue / time;
	double result = 0.0;
	if (time > 0) {
	  	double redouble = primaryAverage * i;
	  	double average = (redouble + i * i)/i;
	  	result += average * (i-1);
	}
	return result;
}

继续把第二个变量也重新定义下:

double getCalculateResult(int times) {
    int initialValue = 100;
	final double primaryAverage = initialValue / time;
	double result = 0.0;
	if (time > 0) {
	  	double redouble = primaryAverage * i;
	  	final double secondAverage = (redouble + i * i)/i;
	  	result += secondAverage * (i-1);
	}
	return result;
}

这样看起来是不是很好了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值