五 Split Temporary Variable
你的程序的有某个临时变量被赋值超过一次,她不是循环变量,也不是集用临时变量。
动机:临时变量的各种用途,其中某些用途会很自然的导致临时变量被多次赋值,如果是这样,就说明他们负担了过多的责任,(循环里面的那个不算他的任务就是那样的),那他们就应该被换掉,分为多个变量,没个变来那个承担一个责任,来清晰代码。
做法:
很简单,看下列子
eg.
下面的列子要计算一个苏格兰布丁的运动距离。在起点处,静止的布丁会受到一个初始力的作用而开始运动。一段时间后,第二个力作用,让她再次加速。根据牛顿第二定律,我们可以计算出运动的距离
private function getDistanceTravelled(time:int):Number {
var result:Number;
var acc:Number = _primary / _mass; //第一次赋值
var primaryTime = Math.min(time,_delay);
result = 0.5 * acc * primaryTime * primaryTime ;
var secondaryTime = time - delay;
if(secondaryTime > 0 ) {
var primaryVel = acc * _delay;
acc = (_promaryForce + _secondaryForce) / mass //第二次赋值
results+= primaryVel * secondaryTime + 0.5* acc*secondaryTime * secondaryTime;
}
retrun result;
}
注意,acc变量如何被赋值两次的。她有两个责任,一个是,保存一个力造成的初始加速度;另一个是,保存两个力共同造成的加速度。
private function getDistanceTravelled(time:int):Number {
var result:Number;
var primaryAcc :Number = _primary / _mass;
var primaryTime = Math.min(time,_delay);
result = 0.5 * primaryAcc* primaryTime * primaryTime ;
var secondaryTime = time - delay;
if(secondaryTime > 0 ) {
var primaryVel = primaryAcc* _delay;
var secondAcc:Number = (_promaryForce + _secondaryForce) / mass
results+= primaryVel * secondaryTime + 0.5* secondAcc* secondaryTime * secondaryTime;
}
retrun result;
}