今儿个真是高兴,成功把一个140来行,前后大概4页多的函数重构为50多行的函数(如果算上添加的辅助函数、以及重构出的函数的话一共是80多行),而且用新的、更好的方法代替了原来的(这是为什么要重构的原因)。
原来的函数可以工作,但极其冗长,逻辑很难理解。我首先把每一句都加上了详细注释,然后运行了两遍,合并了一些冗余的逻辑,理清了思路。然后就是写一个接口相同的新函数来代替它。
这里我用了个小技巧,就是用同样的接口定义一个新函数,老函数并不删除,而是在老函数顶部把调用传递到新函数。这样如果测试有问题,可以简单注释然后使用老函数。
重构的过程比较麻烦,我本想在原来的代码基础上修改,但它的逻辑实在有点乱,而且太长。所以就在自己理解的基础上把逻辑框架用注释的形式写了出来。然后就是填空,每个注释不超过两行代码。多的代码就抽出来做成函数。当最终写完以后我竟然惊讶的发现,我的新逻辑中也有两个地方明显重复,从代码看都完全一样,于是很高兴的又对逻辑进行了一次重构,更加的清晰了。
现在的代码中,逻辑部分只有1页,完全能够清晰地自说明。虽然仍然有继续重构直到函数不超过1页的余地,但我觉得这样已经够了。后面不管是我自己还是别人来维护这段代码都很快理解程序逻辑而且很容易对其进行改动了。
如果不先重构,理清逻辑的话,我可能会再度陷在100多行的代码里不可自拔。