第六章的重新组织函数感觉非常的实用,之前我习惯把实现某个功能的逻辑写在一个方法,那样看起来也没有什么不妥的。可是那样的话如果有其他地方相同的代码片段,那我就要从新写一遍相同的逻辑这样代码就变得冗余。如果用提炼函数将重复的部分提炼出来,每次在需要用到那段逻辑的时候去调用方法这样会使你的代码变得更清爽。人家的阅读你写的代码的时候一眼就能看出前者是个新手,后者至少还是有点基础的。提炼函数的时候最好是以这个函数是“做什么”的来命名,这样别人或者自己阅读很久之前写的代码的时候,只需要看函数名就可以了而不用去了解里面的具体实现提升代码的可阅读性。提炼代码的时候还需注意源函数和被提炼函数里面的变量,被提炼代码中需要读取的局部变量可以当做参数传给目标函数,在原函数中将被提炼的代码换成对目标函数的调用即可。
如果一个函数的本体与名称同样清楚易懂,可以使用内联函数比如:
int getRating(){
return (moreThan())?2:1;
}
boolean moreThan(){
return _more>5;
}
上面的代码可以替换成这样:
int getRating(){
return (_more>5)?2:1;
}
内联临时变量也是同样的道理,如果有一个临时变量只被一个简单的表达式赋值一次,而它妨碍了其他的重构手法,就可以用表达式将临时变量替换。如果程序以一个临时变量保存某一表达式的结果可以用查询取代临时变量,因为临时变量的问题在于他们是暂时的,而且只能在所属函数内使用,将赋值给变量部分的代码独立到一个方法中,这个变量的引用点替换成对新函数的调用即可实现用查询取代临时变量。