
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
代码重构是许多程序员在做代码优化的时候都会去考虑和实施的一个优化方法,今天我们就通过案例分析来简单了解一下,代码重构都需要关注哪些问题。
1)提炼函数
有的观点从复用的角度考虑,认为只要被用过不止一次的代码,就应该单独放进一个函数;只用过一次的代码则保持内联(inline)的状态。
如果你需要花时间浏览一段代码才能弄清它到底在干什么,那么就应该将其提炼到一个函数中,并根据它所做的事为其命名。
2)提炼变量
表达式有可能非常复杂而难以阅读。这种情况下,局部变量可以帮助我们将表达式分解为比较容易管理的形式。
在面对一块复杂逻辑时,局部变量使我能给其中的一部分命名,这样我就能更好地理解这部分逻辑是要干什么。
3)变量改名
好的命名是整洁编程的核心。变量可以很好地解释一段程序在干什么——如果变量名起得好的话。
只在一行的lambda表达式中使用的变量,跟踪起来很容易——像这样的变量,作者经常只用一个字母命名,因为变量的用途在这个上下文中很清晰。
对于作用域超出一次函数调用的字段,则需要更用心命名。
4)引入参数对象
一组数据项总是结伴同行,出没于一个又一个函数。这样一组数据就是所谓的数据泥团,作者喜欢代之以一个数据结构。
将数据组织成结构是一件有价值的事,因为这让数据项之间的关系变得明晰。
使用新的数据结构,参数的参数列表也能缩短。并且经过重构之后,所有使用该数据结构的函数都会通过同样的名字来访问其中的元素,从而提升代码的一致性。
5)拆分阶段
每当看见一段代码在同时处理两件不同的事,作者就想把它拆分成各自独立的模块。
因为这样到了需要修改的时候,就可以单独处理每个主题,而不必同时在脑子里考虑两个不同的主题。
简洁的拆分方法之一,就是把一大段行为分成顺序执行的两个阶段。举个简单的例子:
编译器的任务可拆分成一系列阶段:先对文本做词法分析,然后把token解析成语法树,再对语法树做几步转换(如优化),后生成目标码。
每一步都有边界明确的范围,让人可以聚焦思考其中一步,而不用理解其他步骤的细节。
6)替换算法
如果发现做一件事可以有更清晰的方式,那么就会用比较清晰的方式取代复杂的方式。
“重构”可以把一些复杂的东西分解为较简单的小块,但有时你就必须壮士断腕,删掉整个算法,代之以较简单的算法。
可以先把原先的算法替换为一个较易修改的算法,这样后续的修改会轻松许多。
使用这项重构手法之前,得确定自己已经尽可能分解了原先的函数。
替换一个巨大且复杂的算法是非常困难的,只有先将它分解为较简单的小型函数,才能很有把握地进行算法替换工作。
7)移除标记参数
“标记参数”是这样的一种参数:调用者用它来指示被调函数应该执行哪一部分逻辑。
标记参数会隐藏函数调用中存在的差异性。使用这样的函数,还得弄清标记参数有哪些可用的值。
布尔型的标记尤其糟糕,因为它们不能清晰地传达其含义。在调用一个函数时,很难弄清true到底是什么意思。
如果明确用一个函数来完成一项单独的任务,其含义会清晰得多。并非所有类似这样的参数都是标记参数。
如果调用者传入的是程序中流动的数据,这样的参数不算标记参数;只有调用者直接传入字面量值,这才是标记参数。
另外,在函数实现内部,如果参数值只是作为数据传给其他函数,这就不是标记参数;只有参数值影响了函数内部的控制流,这才是标记参数。
去掉标记参数后,代码分析工具能更容易地体现出“高级”和“普通”两种预订逻辑在使用时的区别。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。