1 符号和症状
含有很多行代码的方法。一般来说,多于10行的方法就该问一下为什么了。
2 问题根源
总是向方法增加东西,而不拿走什么。写代码比读代码容易,这种味道不会引起注意,直到方法变成一个巨大的怪兽。
从心理上说,创建新方法比向已有方法添加代码要难:就两行,没必要创建一个方法。一次又一次这样,最终变成了意大利面条。
3 治疗
经验法则:需要在方法中写注释时,应该把相关代码提取到一个新方法中。如果需要解释,即使是单行代码,也应该切分到单独的方法中。
如果方法有描述性的名字,就不需要阅读其代码来了解其用途了。
- 使用抽取方法来减少方法主体长度。
- 如果局部变量和参数干扰了方法抽取,可以用查询替代临时变量(Replace Temp with Query)、引入参数对象、保存整个对象。
- 如果上述方法不奏效,可以用方法对象替代方法:将整个方法移动到单个对象中。
条件运算和循环通常预示着代码可以移动到单独方法中。对于条件,分解条件;对于循环,抽取方法。
4 收益
带有短方法的类存活时间最长。方法或者函数越长,就越难以理解和维护。
- 长方法是非预期的重复代码的最佳藏身之地。
5 性能
方法数量增加会影响性能?在几乎所有情况下,这种影响非常小,可以忽略。
有清洁、易于理解的代码后,更容易找到真正影响性能的方法,然后重构它,获得真正的性能提升。