重构----Remove Assignments to Parameters (移除对参数的赋值动作)
2008-05-05 16:04
323 查看
Remove Assignments to Parameters (移除对参数的赋值动作)
概要:你的代码对一个参数进行赋值动作
以一个临时的变量取代该参数的位置
int discount(int inputVal,int quantity,int yearToDate)
{
if(intputVal>50)
inputVal-=2;
}
--------------------------------------------------
int discount(int inputVal,int quantity,int yearToDate)
{
int result=inputVal;
if(intputVal>50)
result-=2;
}
动机:
首先,我要确定大家都清楚"对参数赋值"这个说法的意思,如果你把一个名为foo的对象作为参数传给某个函数,那么"对参数赋值"意味改变foo,使它引用( 指向)另一个对象.如果你在被入对象(参数)身上进行什么操作,那不叫对参数赋值,没有什么问题,我也总是这样干.
例如:
void Change(Ojbect foo){
foo.modifySomeWay(); // that's ok
foo= anotherOjbect; //这种写法,就是对参数赋值,最好不要这么写.要移去.
}
作法:
建立一个临时的变量,将要处理的参数赋值给它。
以对参数赋值的操作为界,将其后所有的对此参数的引用点,全部替换为对临时变量的引用。
修改赋值语句,使其改为对新建之临时变量赋值。
编译,测试。
如果代码的语义是传址,请在调用端检查调用后是否还使用了这个参数。也要检查有多少个传址参数被赋值后又被使用。请尽量用return方式返回一个值。如果返回的值不止一个,看看能不能使用对象,或者干脆为每一个返回值设计对象的函数。
范例:
int discount(int inputVal,int quantity,int yearToDate)
{
if(intputVal>50)
inputVal-=2;
if(intputVal>100)
inputVal-=1;
if(intputVal>10000)
inputVal-=4;
}
--------------------------------------------------
int discount(final int inputVal,final int quantity,final int yearToDate)
{
int result=inputVal;
if(intputVal>50)
result-=2;
if(intputVal>100)
result-=1;
if(intputVal>10000)
result-=4;
return result;
}
概要:你的代码对一个参数进行赋值动作
以一个临时的变量取代该参数的位置
int discount(int inputVal,int quantity,int yearToDate)
{
if(intputVal>50)
inputVal-=2;
}
--------------------------------------------------
int discount(int inputVal,int quantity,int yearToDate)
{
int result=inputVal;
if(intputVal>50)
result-=2;
}
动机:
首先,我要确定大家都清楚"对参数赋值"这个说法的意思,如果你把一个名为foo的对象作为参数传给某个函数,那么"对参数赋值"意味改变foo,使它引用( 指向)另一个对象.如果你在被入对象(参数)身上进行什么操作,那不叫对参数赋值,没有什么问题,我也总是这样干.
例如:
void Change(Ojbect foo){
foo.modifySomeWay(); // that's ok
foo= anotherOjbect; //这种写法,就是对参数赋值,最好不要这么写.要移去.
}
作法:
建立一个临时的变量,将要处理的参数赋值给它。
以对参数赋值的操作为界,将其后所有的对此参数的引用点,全部替换为对临时变量的引用。
修改赋值语句,使其改为对新建之临时变量赋值。
编译,测试。
如果代码的语义是传址,请在调用端检查调用后是否还使用了这个参数。也要检查有多少个传址参数被赋值后又被使用。请尽量用return方式返回一个值。如果返回的值不止一个,看看能不能使用对象,或者干脆为每一个返回值设计对象的函数。
范例:
int discount(int inputVal,int quantity,int yearToDate)
{
if(intputVal>50)
inputVal-=2;
if(intputVal>100)
inputVal-=1;
if(intputVal>10000)
inputVal-=4;
}
--------------------------------------------------
int discount(final int inputVal,final int quantity,final int yearToDate)
{
int result=inputVal;
if(intputVal>50)
result-=2;
if(intputVal>100)
result-=1;
if(intputVal>10000)
result-=4;
return result;
}
相关文章推荐
- java重构学习6:移除对参数的赋值(Remove Assignments to Parameters)
- 重构改善既有代码设计--重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
- 重新组织你的函数之七 :Remove Assignments to Parameters(移除对参数的赋值动作)
- 重构手法07:Remove Assignments to Parameters (移除对参数的赋值)
- Remove Assignment to Parameters(移除对参数的赋值动作)
- Remove Assignments to Parameters (移除对参数的赋值)
- 6.7 Remove Assigments to Parameters(移除对参数的赋值)
- 6.7 Remove Assigments to Parameters(移除对参数的赋值)
- 《Refactoring》,Remove Assignments to Paraments(移除对参数的赋值)
- 『重构--改善既有代码的设计』读书笔记----Remove Assignments to Parameters
- java 代码细节(Remove Assignments to Parameters)
- 重构笔记——移除对参数的赋值
- Remove Assignments to Parameters
- 代码重构之移除对参数的赋值
- 1.7 移除对参数的赋值动作
- 重构笔记——移除对参数的赋值
- 重构手法44:Remove Parameter (移除参数)
- FireFox下为元素附加事件并传递参数-addEventListener attachEvent - Pass parameters to event-function
- 简化函数调用之三 :Remove Parameter(移除参数)
- how to remove file and commit from history(如何移除 commit 歷史紀錄)