到目前为止,我介绍的重构手法都是关于如何新建、移除或重命名程序的元素。此外,还有另一种类型的重构也很重要,那就是在不同的上下文之间搬移元素。我会通过搬移函数(198)手法在类与其他模块之间搬移函数,对于字段可用搬移字段(207)手法做类似的搬移。

有时我还需要单独对语句进行搬移,调整它们的顺序。搬移语句到函数(213)和搬移语句到调用者(217)可用于将语句搬入函数或从函数中搬出;如果需要在函数内部调整语句的顺序,那么移动语句(223)就能派上用场。有时一些语句做的事已有现成的函数代替,那时我就能以函数调用取代内联代码(222)消除重复。

对付循环,我有两个常用的手法:拆分循环(227)可以确保每个循环只做一件事,以管道取代循环(231)则可以直接消灭整个循环。

最后这项手法,我相信一定会是任何一个合格程序员的至爱,那就是移除死代码(237)。没什么能比手刃一段长长的无用代码更令一个程序员感到满足的了。

8.1 搬移函数(Move Function)

8.2 搬移字段(Move Field)

8.3 搬移语句到函数(Move Statements into Function)

8.4 搬移语句到调用者(Move Statements to Callers)

8.5 以函数调用取代内联代码(Replace Inline Code with Function Call)

8.6 移动语句(Slide Statements)

8.7 拆分循环(Split Loop)

8.8 以管道取代循环(Replace Loop with Pipeline)

8.9 移除死代码(Remove Dead Code)