当前位置: 首页 > 后端技术 > Python

基于Python的代码重构(一)

时间:2023-03-26 15:01:39 Python

相信在你的程序员生涯中,你一定有过这样的经历:打开一个项目,开始看里面的代码,过了一会儿就恶心-明明是一样的逻辑,为什么要重写几个地方?同样的意思,为什么这里用type,那里用category?更何况还有一锤定音这样神一样的变量名。你忍不住生气,打开gitlog看看是谁写了这么疯狂的代码,结果却查出你5个月前留下的名字!于是你默默地吞了一口苦水,继续为这座施式建筑添砖加瓦。你可能在想我还能做什么?项目由来已久,工期总是那么紧。我可以自己改写吗?就算我有这个本事,老板也不会答应——只要项目还能跑起来,谁愿意付出这么高的成本,冒着停线的风险。等一下……重写整个项目,让它继续“糟透了”并不是你唯一的选择。你还有重构(refactor)!据说这本书《代码重构》也是程序员的经典书籍之一,只是知名度不高,不被重视。原因大概是业界还是更关注如何实现功能,而不是如何写出好的代码。幸运的是,作为一个老年程序员,我有幸在一家重视产品质量的公司工作。前段时间分享给技术团队,强烈推荐这本老书。由于本人目前的技术栈是python+web,所以对于重构中提到的烂代码,我索性都找了对应的python实例,也算是对原书的补充。(《代码重构》国内有两个版本,第一个版本的示例代码是Java,第二个版本是JS。)原ppt使用了很多内部代码,不便公开。后面我会整理成一个纯demo,做一个小编来分享。我们先来看看什么是重构?重构是对已有代码进行“翻新”的操作,通过微调的方式稍微提高代码质量。当这种微调成为日常开发的一部分时,整体的代码质量会得到很大的提升,并且可以长期维护。这种高质量一直保持着。不要想当然地认为重构就是字面上的“重新架构”。重推一遍的做法恰恰与重构相反。它的英文refactor也是一个很有排他性的名词,可以理解为re(re)+factor(因子,因子),非常形象地表达了从微观层面改造的意思。现代IDE基本上内置了对经典重构方法的支持。比如我们看一下pycharm社区版(Idea、Webstorm等JetBrainsIDE类似):它直接提供了Refactor顶部菜单,里面提供了大量的重构方法。也有相应的快捷键。如果你发现一个变量名是错误的:yi_chui_ding_yin=Trueifyi_chui_ding_yin:print('vip')else:print('normal')deftest():foriinrange(0,5):ifyi_chui_ding_yin:print('breakbyvip')return,当光标在yi_chui_ding_yin这个变量的任意位置时,按shift+F6调出“重命名”功能,重命名:然后你会发现这个变量在所有代码中使用的位置都被高亮显示.这个时候写下你觉得合适的名字,回车,所有的变量都改名修改了。全程支持全键盘操作,流畅流畅。你可能认为search-replace也能达到目的,但是在一个大的项目中,相似的名字有很多。搜索和替换的时候,要仔细区分每一个搜索结果,看是不是你想要的,如果是“通俗”的名字,比如“enabled”,一下子找到几百个结果,真是哭笑不得,你可能会被说服直接退出。更何况rename只是重构中最常用的方法。当你习惯抽取viriable、extractmethod,以及与之对应的一组inlineoperations,再结合changesignature,你会觉得“清理”代码是一件很“辛苦”的事情。“累活”下次就轻松多了,就像买个扫地机器人帮你打扫房间一样。当然,生活中大多数“不会”收拾房间的人,并不是缺少工具,而是根本看不出房间哪里乱了(笑)。提高的方法是先培养对混乱的敏感度。《重构》用“难闻的气味”来形容代码的混乱,总结出几种“难闻的气味”识别和重构模式,我们将在下一篇文章中开始研究这些难闻的气味。