代码重构
1.什么是重构?
重构:
名词:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其理解性,降低其修改成本。
动词:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
2.为什么重构?
(1)重构改进软件的设计
如果没有重构,程序的内部设计(或架构)会逐渐腐败变质。例如,当人们只为短期目的而修改代码,经常没有完全理解架构的整体设计,通过代码的累积,逐渐偏离原本的设计。
(2)重构是软件更容易理解
程序设计,很大程度就是与计算机对话。然而在代码编写中,是为了让别人也能读懂。
(3)重构能帮助找到bug
如果要对代码进行重构,首先要深入理解代码的所作所为,并立即把新的理解反映在代码中,于是能有效找到bug。
(4)重构提高编程速度
例如,开发一个项目,一开始进展很快,然而到后来,想要添加一个新功能需要的时间越来越多,他们要花更多的时间把新功能塞进已有的代码库,不断蹦出来的bug修复起来也越来越耗时。代码库像是补丁堆补丁,需要细致的考古工作才能弄明白系统是如何工作的。花费一定的时间去重构代码,良好的模块划分使添加新功能的人只需理解小部分代码,就可做出修改,引入bug的可能性也小,修复bug也容易的多。
3.何时重构?
1.三次法则(事不过三,三则重构)
2.预备性重构:让添加新功能更容易
在添加新功能之前,对已有代码进行观察,有时对代码结构进行微调,就能使工作容易的多。
3.帮助理解的重构:使代码更易懂
例如,有时看到了一段结构糟糕的条件逻辑,也可能复用一个函数,也可能命名很糟,要花费很久才弄懂它在做什么,这都是重构的机会。
4.捡垃圾式重构
帮助理解的重构还有一个变体,我已经理解代码在做什么,但发现做的不好。例如,逻辑不必要地迂回复杂,或者两个函数几乎完全相同,可以用一个参数化的函数取而代之。
5.复审代码时重构
代码复审或者叫代码走查,对现有代码进行复审,可以改善开发状况,有助于在开发团队中传播知识,让缺乏经验的人多学习。
6.何时不该重构?
如果看见一块凌乱的代码,单并不需要修改它,那么就不需要重构它。
如果重写比重构容易,就不需要重构。