1. 搬移函数
如果一个函数频繁引用其他上下文的元素,而对自身上下文的元素却很少调用,说明它属于另一个上下文。
对于与方法同名的变量,想想它是否有存在的必要。
2. 搬移字段
数据结构是一个健壮程序的根基,坏的数据结构本身会隐藏程序的真实意图。把字段放到适合的类中,或是为相互关联的字段创建一个类。
3. 搬移语句到函数
如果多个方法调用a方法之前,都要写一样的语句,如判断语句,那么就把这个判断语句放在a方法中。
4. 搬移语句到调用者
函数的边界发生偏移的一个征兆是,以往在多个地方共用的行为,如今需要在某些调用点面前表现出不同的行为,则把表现不同的行为从函数搬移到调用者中。
5. 以函数调用取代内联代码
用函数将相关行为打包起来,并取一个准确的名字,这有利于理解代码
6. 移动语句
让存在关联的东西一起出现,可以使代码更容易理解。比如在使用局部变量或成员变量时声明它,而不要一起在顶部声明赋值。
7.拆分循环
让一个循环只做一件事,虽然循环是一样的,但是拆分成多个循环易于理解,这样看上去好像牺牲了很多计算性能,但是还是理解比较重要。拆分循环之后,往往会给每个循环提炼一个方法。
程序的性能问题往往只会被1%的代码影响,其他的循环看上去似乎非常影响性能,但其实并没有你想象地那么严重。而且拆分代码提高代码的可读性,更利于性能调优,如果真的是因为循环影响的性能,也可以通过之后的调优优化程序。
8.以管道取代循环
管道使用一组运算来描述集合的迭代过程,运算的参数及返回值都是一个集合,最常见的运算是map与filter,filter是将参数筛选成返回值的判断语句,map则是作用于参数上的一个转换过程。比如:
list names = input.filter(i=>i.job==="programmer").map(i=>i.name);
lambda语句(相当于一个简单的匿名函数):i=>(表达式),这里的=>左边是匿名函数的参数,右边是表达式。
9.移除死代码
如果一段代码不再被调用,就删除它,即使你觉得以后可能还会调用,那也可以从版本控制系统中把它找出来。