在编程中,最常见的错误基本上来源于方法过长。如果一个方法过长,那它包含的信息量就越大,逻辑就越复杂。解决的办法就是将一个长的方法拆分为多个小的方法,使其职责明确、逻辑清晰和容易阅读。这里所谓的拆分,即为组合方法:一个大的方法由若干个小方法组成。
这里就介绍一个简单的重构:提取方法Extract Method。
- 适用场合:程序中某些代码能够被分为一组。也就是说,这些代码完成一个共同的目标。
- 解决方法:将这样的一组代码提取为一个方法,并赋予它一个有意义的名字,以表达其目的。
- 动机:提取方法是最常见的重构。如果一段代码需要一段注释来描述其功能,那么这段代码就需要被提取成一个方法了。方法应该短小精悍、命名准确。好处有两点:第一,短小方法的粒度更细小,重用的机会更大;第二,使更高层次的方法阅读起来更加容易,如果方法命名良好,那高层次的方法阅读起来就想阅读一连串的自然语言一项赏心悦目。对于一个方法的长度,不在于方法物理意义上的行数,而在于这个方法的名称和方法体所实现的功能之间的语义差距。
接下来就具体介绍一下【提取方法】重构的实施过程。
- 创建一个新方法,并以方法体的意图命名。
- 将要提取的代码从原位置拷贝到目标方法。
- 浏览被提取的代码,其中包含的一些变量的作用范围仅限于原方法,那这些变量就是这个新方法的参数。
- 查看是否存在仅为被提取代码使用的临时变量,如果有,就将其改为目标方法的临时变量。
- 查看被提取的代码是否改变了局部变量。如果只改变了一个,那就将其作为返回值;如果这样做不适合或是改变多个局部变量,那就得【分离临时变量】来限制临时变量的数量了。
- 将那些被提取代码所需的变量作为参数传入目标方法。
- 处理完所有的局部变量后进行编译。
- 在原代码中调用目标函数来替代被提取的代码
- 编译并测试。
这样重构就结束了!