啥也不说先来看看一段代码
重构前
[C#] 纯文本查看 复制代码
public double getDistanceTravelled(int time)
{
double result;
double acc=_primaryForec / _mass;
int primaryTime = Math.Min(time,_delay);
result = 0.5 * acc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if (secondaryTime > 0)
{
double primaryVel = acc * _delay;
acc = (_primaryForec + _secondaryFore) / _mass;
result += primaryVel * secondaryTime + 0.5 * acc * secondaryTime * secondaryTime;
}
return result;
}
重构后
[C#] 纯文本查看 复制代码
public double getDistanceTravelled1(int time)
{
double result;
double primaryAcc = _primaryForec / _mass;
int primaryTime = Math.Min(time, _delay);
result = 0.5 * primaryAcc * primaryTime * primaryTime;
int secondaryTime = time - _delay;
if (secondaryTime > 0)
{
double primaryVel = primaryAcc * _delay;
double secondaryAcc = (_primaryForec + _secondaryFore) / _mass;
result += primaryVel * secondaryTime + 0.5 * secondaryAcc * secondaryTime * secondaryTime;
}
return result;
}
这一种重构手法实在没什么好说的,仔细比对下代码就能明白是什么回事;但以下两种临时变量,被多次赋值时不能使用此手法循环变量:会随着循环的每次运行而改变;
结果收集变量:负责将"通过整个函数的运算"而构成的某个值收集起来。
注:重构后的代码并不是最后的重构代码,还需采用别的重构手法进行重构;如有兴趣的小伙伴可以自行试着重构下。
参考文献
重构——改善既有代码的设计 【美】Martin Fowler 著
熊节 译
|