过长的函数
症状
一个方法包含了太多的代码行,做了很多不同的事情。
Long Method
病因
在早期编程语言,调用子程序需要额外开销,所以不愿意使用小函数(现在OO语言几乎已经完全免除了进程内的调用动作开销),在想法上认为新功能在原函数上修改比添加新函数开销小,由于编写代码比阅读代码更容易,所以任何新的需求都是在原有方法里添加,这种 坏味道 一直未被注意,直到方法变成一个做太多事情的丑陋野兽。
导致的健康问题
函数过长会令程序变得很难理解,所以需要花费大量的时间去阅读理解函数在做什么,并且修改起来影响范围可能也会很大,这样无形中增加了维护成本和添加新需求发生bug的几率。
治疗
每当感觉需要注释说明点什么的时候,就可以把需要说明的东西写进一个独立函数中,并以其用途命名,哪怕函数名比实现还要长,关键是要说明"用途"
Long Method Refactoring
- 无局部变量
运用 Extract Method 按照用途提炼函数即可。
IntelliJ IDEA 练习视频
- 有局部变量
如果发现局部变量只是保存某一个表达式的运算结果,那么运用查询函数Replace Temp with Query 替换使结构清晰后,再运用 Extract Method
提炼按照用途函数即可。
如果提炼的新函数对参数赋值了,运用 Remove Assignments to Parameters
IntelliJ IDEA 练习视频
康复
- 每个函数各司其职,通过观察函数名字就知道做了什么事,而不需要具体看代码实现。
- 函数短小简单,理解起来很快,让重复代码无处可藏
如果优化性能问题,清晰短小易懂的代码,可以更快找到有效的重构代码的方法
Long Method After Refactoring
网友评论