首页 > 代码库 > 代码重构之逻辑聚集
代码重构之逻辑聚集
上一篇文章中写了一个重构数据结构,也就是数据聚集的例子。之前还有过一个经历,是重构一个很长的函数,过程大概就是把相关的逻辑聚集起来。我将其称为逻辑聚集。这是一个重构代码逻辑的过程。
故事是这样的。在我手上的,是一个由几百行代码组成的函数。程序整体上看起来有比较清晰的代码块,有的代码块很相似,但是细节有不同。曾经尝试修改过这个代码。但是,由于一些局部变量贯穿整个函数,在不同的地方发挥作用,而且,不同的代码块之间相互影响。所以,修改这个函数的逻辑很困难,一个小的改动就要改好几个地方。所以,就想着重构一下这段代码。最直接的目标就是,将这个函数变短到几十行的样子,并且使得函数更容易理解。
首先,将几个看起来相似的代码块提取出来,抽象成一个单独的函数。而对于这几个代码块中不同的部分,则以变量的形式表示,作为函数的参数。需要注意的是,在修改过程中,要将只在代码块中起作用的变量作为局部变量,而将前面代码穿过了的参数作为函数参数传入进来,并且将代码块中修改了,而后续代码还有用的变量作为函数的返回参数。
其次,将其他的逻辑相对比较独立的代码块提取出来,抽象成单独的函数。同样要注意上面所提的事项。
最好,很重要的一点,要注意给每个提取出来的函数起一个直观易懂的名字。
经过这样的修改之后,我惊奇的发现整个函数变得很短,也很容易理解,很直观。整个函数看起来可能类似这样
1 void process_data(int* data, int len, int flag) {2 parse_data(data, len);3 if (flag) {4 transform_data_with_method_1(data, len);5 } else {6 transform_data_with_method_2(data, len);7 }8 compress_data(data, len);9 }
而且前面提到的那些贯穿整个函数的局部变量也被消除掉了。这时候尝试对代码做一些修改就容易多了。
最后,总结一下逻辑聚集的好处
- 聚集起来的短小函数更容易重用
- 聚集起来的短小函数更容易测试
- 由若干个调用这些短小函数所组成的代码更容易理解,有问题更容易发现,也更容易修改和扩展。
- 短小的函数使得局部变量的作用域更小,因此程序整体上更容易做并行,所有在有些情况下可以使程序运行效率更高。
代码重构之逻辑聚集
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。