重构《Split Loop(分解循环)》
WHAT
在循环中,一次循环做了两件事情,将循环分解,重复这个循环,每次只做一件事情
?
潜在问题:性能问题,如果遇到性能问题,先让代码清晰可读,让你更快找到性能优化点,再做优化
?
本次重构涉及的基本重构较多,主要有:
Student类是一个哑对象,表示一个学生,有年龄(age)和成绩(grade)两个属性
?
package split.loop;public class SomeClass {private Student[] students;void printValues() {System.out.println(averageAge());System.out.println(totalGrade());}private double averageAge() {double result = 0; // 平均年龄for (int i = 0; i < students.length; i++) {result += students[i].getAge();}return result / students.length;}private int totalGrade() {int result = 0; // 总成绩for (int i = 0; i < students.length; i++) {result += students[i].getGrade();}return result;}}??这时,代码已经相当清晰了,我们不需要看方法注释,以及方法内部实现,就可以知道printValues这个方法做了哪些事情,这就是重构的魅力,小步慢跑,一步一前进,但是,最最重要的前提是:我们在重构之前,必须有一个运行良好且速度较快的单元测试,让我们在测试、编码、重构不断地切换角色,更换帽子总结
本重构虽然很简单,一些很小的改动,能够使代码可读性更强,更易维护,希望本实践对你有益,希望大家和我一起动手做重构,也希望你提出宝贵意见或反馈