本篇主要介绍9种方法对函数进行重构,包括以下几个方面:
函数:
- 1 入参
- 2 临时变量
- 3 算法
- 4 结构
- 5 注释
- 6 返回值
方法:
- 1 提炼函数
- 2 内联函数
- 3 内联临时变量
- 4 函数代替临时变量
- 5 引入解释性变量
- 6 重复使用临时变量
- 7 禁止参数赋值
- 8 对象代替变量
- 9 替换算法
基础
基础方法强调将具有独立逻辑的代码封装到一个函数,并给函数起一个能表达其功能的名字。目的很简单,就是为了去掉“注释”。
1. 提炼函数
主要是针对那些函数体包含太多逻辑代码,可以考虑将其中具备一定独立逻辑的代码提炼成一个函数。这样做的好处是:(1)一个适当的函数名字可以省略一段注释,(2) 越小规格的分解,越容易将来被复用。
示例:
public int increaseSalary(Person person){
if( person.score > 90) {
person.salary += 1000;
} else {
person.salary += 500;
}
/**
* Print person information
*/
System.out.println("Person name: " + person.name);
System.out.println("Person age: " + person.age);
System.out.println("Person position: " + person.position);
System.out.println("Person salary: " + person.salary);
}
好的代码应该一目了然,如果通过函数名就能知道它的作用,那为什么还要加注释呢?!
public int increaseSalary(Person person){
if( person.score > 90) {
person.salary += 1000;
} else {
person.salary += 500;
}
printPersonInfo(person);
}
private void printPersonInfo(Person person){
System.out.println("Person name: " + person.name);
System.out.println("Person age: " + person.age);
System.out.println("Person position: " + person.position);
System.out.println("Person salary: " + person.salary);
}
提炼函数适用度极高。在项目初期,在需求驱动下,很少有人能顾忌到代码结构,很容易将一大坨逻辑塞到一个函数下,使得函数变得很臃肿。其中逻辑很难一眼看清楚,难免存在很多bug。在代码review的时候