代码重构技巧:如何将烂代码变成好代码?

养成重构代码的习惯 代码重构是在不改变软件功能的前提下优化内部结构,提升可读性、可维护性和性能。重构优先级分为:高(代码异味、频繁修改、性能瓶颈)、中(设计原则不符、技术过时)、低(风格统一、局部优化)。方法包括函数重构(提取方法、参数化)、类重构(提取类、继承优化)和模块重构(拆分、通信优化)。重构能提高可维护性、扩展性、可读性,改善性能并降低技术债务。工具推荐IDE(IntelliJ、Eclipse)、静态分析工具(SonarQube)和版本控制系统(Git)。重构是保障软件长期稳定的关键实践。 阅读详情

前言

作为有几年工作经验的程序员,都会对 bad code 不满意。如何将烂代码变成好代码,本文将由浅入深、一步步带你理解重构的奥秘,让你对重构有个基本的了解。本文基于文章《The Simple Ways to Refactor Terrible Code》编译整理而成。

任何一个有几年工作经验的程序员都经历过这样的场景:回顾早期写的代码,会陷入深深的怀疑,这么烂的代码是我写的吗?相比起刚入行时候的你,这几年不管是自己发奋学习,如阅读《编程模式》、《重构:改善现有代码的设计》等圣经级著作,还是公司大神对你耳提面命,你对程序架构、编码规范的认识都有了很大的提升。还有一种情况是做项目的时候,或多或少存在赶工期的问题,很可能为了能在 deadline 之前交付,某个问题的解决方案并不够优雅。

以每一个有责任心(代码洁癖)的程序员都会去考虑重构的问题,重构代码有很多好处,正如作者在文章中提到的:后期修正 bug 更加容易、提高程序的可读性、改进程序原有设计,更重要的是当你在小组讨论会上,向同事展示代码时不会觉得丢人。以上这些好处是彼此联系的,比如当你接手一个遗留工程,前开发人员早已不知去向,不管是要增加功能还是修正 bug,你都需要读懂代码,这就需要提高程序的可读性,你能依靠的除了你堪比福尔摩斯的推理能力,就只有重构这把杀猪刀了。

需要Python零基础学习资料的伙伴,可以在公众号【码农资料库】中回复【py】自行领取 包括以下学习资料:

① Python所有方向的学习路线图,清楚各个方向要学什么东西

②Python课程视频,涵盖必备基础、爬虫和数据分析

③ Python实战案例,学习不再是只会理论

④ Python电子好书,从入门到高阶应有尽有

⑤ 华为出品独家Python漫画教程,手机也能学习 ⑥ 历年互联网企业Python面试真题,复习时非常方便

在这里插入图片描述

虽然重构有这么多好处,为什么当我们准备开始的时候,却会反复纠结?作者大致提到以下原因:

  • 担心破坏已有代码。这种情况在核心业务系统尤为普遍,比如电商平台,企业的 ERP 平台等,系统需要 7*24 运行,你的一个修改可能导致 10000 元的商品被 1 元钱买走了。作为普通人的我们,自然会抱着多一事不如少一事的心理,毕竟出了问题,会吃不了兜着走。

  • 不能立即看到产出。在每日的 stand-up 会议中,当研发经理问我,你今天干什么了,我说重构代码,如果连续三天都是这个答案,估计研发经理就要发飙了。

  • 没有时间去做。面对繁重的研发任务和日益逼近的 deadline,重构,真的不是一场说走就走的旅行。

说了这么多,读者朋友可能会有一个想法,是否有一些方法,能让我享受重构的好处,又能避免上面提到的风险。

幸运的是还真有!

下面我将从最简单、基本不会破坏已有代码、花费很少时间的重构方法入手,逐步深入,让大家对重构有一个基本了解,在对方法的介绍中,我将按照《InfoQ 编程语言 2 月排行榜结果出炉》中的调研情况,选取用户掌握最多的编程语言 Java,以及该语言使用最多的 IDE 环境 Eclipse,进行举例。

重构入门

为了消除恐惧,让我们从最简单的重构方法入手

1. 格式化代码

当你发现代码缩进层次不齐,代码块中缺少{}等问题时,就需要考虑代码格式化了,现在的 IDE 工具已经对格式化提供了很好的支持,以 eclipse 为例,选中要格式化的代码,点击以下菜单项就能完成代码格式化。

此外很多源代码管理网站,也提供了格式化工具,如图所示:

在团队开发中,为了保证开发代码样式统一,需要建立编码规范。我们并不需要重头建立编码规范,可以在大厂的编码规范基础上进行定制,比如在 Java 领域可采用阿里、华为、Google Java Style Guide 等编码规范。该编码规范可以与 IDE 进行结合,如在 eclipse 中,打开 Window->Preferences->Java->Code Style 导入编码规范:

重要的是,不管选择何种规范,要坚持下去,并让每个团队成员都用起来。

2. 注释

在代码开发中,好的注释可以提高程序的可读性,坏的注释可能会画蛇添足,甚至起反作用。作者提到好的注释要做到和代码相关、及时更新。很多时候,代码刚开始编写时,注释和代码是一致,后期因为间隔时间过长或其他人接手修改代码,没有对注释及时修改,就会造成注释和代码渐行渐远。

尽量减少不必要的注释。如很多函数或者类,如果设计架构清晰,通过命名就能知道他们做什么,注释不是必须的。还有一种情况是暂时不用的代码,很多人会觉得以后会用到,会加个注释,作者给出的建议是删掉它,如果你将来真的用到了,可以到 git(一种代码管理工具)的历史记录中查找。

对于逻辑混乱的代码,如在循环中随意使用 break,复杂的 if 语句嵌套等,你要做的是理清逻辑,重构代码,而不是让注释替你补锅。正如《重构》中提到的 “当你感觉需要撰写注释,请先尝试重构,试着让所有注释都变得多余。”

3. 废弃的代码

随着系统版本的不断迭代,有一些函数或类不再使用后,我们应该将它及时删除,否则随着时间流逝,会造成代码库臃肿,程序可读性变差。而且如果还发生人员的变动,慢慢会成为谁也不敢动的代码,因为都不知道有啥用和在哪用到。

多先进的 IDE 工具都对查找代码的调用提供了支持,以 eclipse 为例,查找函数是否被调用,可以使用调用层次图功能,或者直接使用高级搜索功能,如图所示:

在调用层次图(Call Hierarchy)中可以看到 getInstance() 函数被什么地方调用。

如果使用类似于 spring 的自动装配功能,在 xml 中定义了调用关系,可以使用高级搜索功能查看 xml 或 properties 文件中定义的同名函数进行筛选。

4. 变量命名

就像我们人一样,一个好名字对变量、常量、函数和类都很重要,一个好的名字会让其他开发人员很容易明白其功能是什么。以下是命名的一些注意事项:

  • 类和文件名使用名词,但这个名词要有意义,比如 Data、Information 就意义不明显,不是好名字。

  • 函数使用动词或短语命名,比如 isReady hasName。

  • 长名字 vs 无意义名字:在长名字和无意义名字中选择时,请选择长且有意义的名字,比如 java 语言中使用最广的类库 spring 中的一个命名是:SimpleBeanFactoryAwareAspectInstanceFactory。

  • 命名法则:常见的有驼峰命名法(camelCase)和蛇形命名法(snake_case), 比如文件名使用蛇形是 file_name,驼峰式 fileName。选择一种,所有的命名都按照这个规则,并将其作为编码规范的一部分,让团队成员都要遵守。

如果你要对已有代码中错误的命名方式进行修改,eclipse 提供了很好地支持:选择要修改的类、函数或变量,选择 Refactor——》Rename 可以同时修改该变量在声明和使用处的名称,如下图所示:

5. 常量命名

常量的命名除了要遵守上一小节提到的通用方法外,还有一类魔法数字(magical numbers)的情况,如使用 0,1 来代表男女。更恰当的做法是定义常量名来代替魔法数字,如在 Java 中:

final int static FEMALE=0,MALE=1;

6. 负值条件的重构

在条件或循环语句中,使用负值条件,会让代码难以理解、容易出错,比如判断是否为男性,条件写成了 “! isNotFemale(gender)”

重构方法是将条件改成正值,并调换 if/else 语句代码块的顺序。

7. {} 作为单独的一行

正确的{}格式已经在 1 部分中提到,这里再强调下,如果你没有将括号作为单独的一行,如下所示:

catch (IOException e) { e.printstackTrace(); }

你得到的好处只是减少了一行代码,但是当你设置断点调试时,断点将不能精确定位到你想调试的部分。

8. 变量定义和使用距离太远

变量的定义和使用不要离得太远,一般不要超过 20 行,函数也类似。如果你意识到这个问题,但并不能缩短定义和使用的距离,那代表这是个大函数(big function),你需要对函数做拆分。

以上是对入门级重构方法的介绍,在进行重构时,最重要的规则是:每次只做微小修改,并保证测试能正确运行(小步快跑)。

重构进阶

现在我们对重构已经有了基本的了解,并建立了初步的信心。让我们下面关注一些稍微复杂的重构内容。

1. 重复代码

当你发现相同的代码块在三个地方都出现时,你就需要考虑重构代码了。对于同一个类中重复的代码块,可使用提取方法(extract method:将重复代码提取出单独的函数)来完成;对于一组相关类如父类、子类 A、子类 B 中的重复函数,通过上移方法(pull method:将子类中的方法移入父类中)和模板方法(template method:父类方法定义模板,子类编写不同实现)来完成。

Eclipse 提供了相关功能,如图所示:

2. 函数参数

  • 开关参数的滥用(boolean parameters):函数的形参中有一个是 boolean 类型,函数体根据该参数为 true 或者 false 执行不同的代码块。这种方式会导致重构的另一个坏味道——大函数(big function)的形成,从而增加代码的复杂性。重构方法是:去掉这个开关参数,将函数拆分成两个函数。

  • 在函数内修改了参数:参数用于外界向函数体传递信息,好的做法是参数对于函数是只读的。如果在函数内修改参数,会造成函数功能难以理解,如果函数内多次修改参数,这个函数会变成一座迷宫,重构方法是:将参数赋值给局部变量,对局部变量修改,如下代码所示:

原始的:

int fun(int val) { val=32; }

修改后:

int fun(int val) { int temp=val; temp=32; }
  • 参数太多:函数的参数最多有三个是合理的,超过三个就需要提高警惕了。重构方法是:根据逻辑拆分函数;引入参数对象(parameter object:构造参数类,将原来传递的参数作为类的属性,调用方传入该类的一个对象)

3. 变量多余

当定义的变量没太多含义,而且没有赋值操作,如下代码:

double basePrice = anOrder.basePrice(); return (basePrice > 1000);

其中的 basePrice 完全是多余的变量,完全可以用函数本身来替代它,如下代码:

return (anOrder.basePrice() > 1000);

4. 缺少变量

某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果。如果它们被赋值超过一次,就意味着它们在函数中承担了一个以上的职责。如果临时变量承担多个责任,它就应该被替换为多个临时变量,每个变量只承担一个责任。

重构方法:针对每次赋值,创造一个独立、对应的临时变量

5. 复杂条件

我们都见过由 && || 构成的复杂的多行条件。复杂条件可读性很差,调试和修改也很麻烦。

一个简单的重构方式是:将这块代码抽取出来,变成一个单独的判断函数,如下代码:

double fetchSalary(double money, int day) { if(money>10000 && day>30 ) { return money``day/365``0.2; }else { return money``30.0/365``0.1; } }

其中的条件 money>10000 && day>30 可重构为:

boolean isHigherSalary(double money,int day) { return (money>10000 && day>30 ); }

老旧代码的重构

在进行代码重构时,需要考虑测试代码是否能覆盖重构的功能,如果没有,需要增加测试用例覆盖所做的修改,否则重构可能会破坏已有的功能。在前面的章节,作者假设已有足够的测试用例,并且重构完成后测试可以正确运行。

但是如何重构测试用例没有完全覆盖的代码呢,如老旧代码?作者的建议是只做必要的重构,如当需要修正 bug 或者增加新的功能,这种情况下,先为遗留代码编写测试用例,在理解的基础上重构代码,为代码修改做好准备,然后进行代码修改。

从这点上来说,你可以进行任何类型代码的重构:一次只做一步重构,从小的容易的重构做起,并频繁测试。

利用工具

重构代码需要花费时间,当项目工期很紧时,很难下定决心去做重构。为了让重构变得更容易,市面上提供了大量相关工具,如 pylint( Python 代码分析工具)、Checkstyle(代码规范工具)、Sonarqube(代码质量管理的开源工具)

此外,你要保证你的测试用例跑的足够快,否则你会没有耐心等待测试运行结果,或者直接就不运行了。

理想情况下,程序在构建后部署到测试环境前,可以借助 CI/CD(持续集成 / 持续部署)工具实现代码质量检查、代码样式检查、潜在 bug 监测等模块的自动化运行。

总 结

这篇文章并没有穷尽重构的所有内容,更多的重构清单和实例,请参考鲍勃大叔编写的《代码整洁之道》(Clean Code),尤其是第 17 章的味道与启发(Smells and Heuristics)和马丁·福勒(Martin Fowler)编写的重构(Refactoring)一书 。不管你打算以哪本书为主,在实践过程中,都会殊途同归——沉淀出几条简单的规则。

不要专门花费大量的时间去进行重构,利用小块时间,每次只做一部分,只要保证代码质量比之前有进步就可以了。不要想着以后再做,这个以后很可能是永远不,最终你将面对一系列可怕的遗留代码,然后你就深刻理解了“出来混迟早是要还的”这句话的涵义。

Python 搭建 RESTful API 的代码重构技巧 随着业务快速迭代,许多Python开发者会遇到这样的困扰:最初快速搭建的RESTful API逐渐变得“臃肿”——路由代码堆积在一个文件、重复的鉴权逻辑满屏飞、数据库查询慢如蜗牛……本文章聚焦Python生态中最常用的Flask/Django框架,覆盖从“识别重构场景”到“落地具体技巧”的完整路径,帮助开发者掌握让API代码“永葆青春”的秘诀。本文将通过“故事引入→核心概念→重构技巧→实战案例→工具推荐”的结构展开。 阅读详情

相关推荐

C++/WinRT入门指南:现代Windows原生开发的核心技术

Windows运行时(WinRT)是微软为现代Windows应用开发设计的一套跨语言API框架,它基于COM技术原理构建,提供了统一的二进制接口标准。这项技术的核心价值在于让开发者能够以原生性能调用系统级功能,同时保持跨语言兼容性。在工程实践中,C++/WinRT作为官方推荐的C++语言投影,通过标准C++语法封装WinRT API,显著降低了开发复杂度。特别是在异步编程场景中,结合C++20协程特性,能够大幅提升代码可读性和维护性。对于需要高性能图形处理、系统集成或跨平台兼容的桌面应用开发,掌握C++/W

weixin_33910191的博客 1197

什么是代码重构,以及在什么场景下应该怎么重构

代码重构(Code Refactoring)是指在不改变软件外部行为的前提下,对代码进行优化和调整,以提升代码的可读性、可维护性和可扩展性,同时减少代码中的冗余和潜在的错误。重构的目的提高代码可读性通过改善命名、减少复杂度等,让代码更易于理解和维护。增强可维护性使代码更容易修复问题和添加新功能。减少技术债务优化原有设计中的不良模式和冗余实现。提升性能或效率(有时)一些重构操作可能优化性能,例如消除不必要的操作或资源开销。常见的代码重构方法重命名修改变量、类、方法等的名称,使其更有意义。

weixin_45056021的博客 2686

8155平台multi-display(多屏显示)原理与配置

8155平台多屏互动原理与配置

漂流瓶の海岸 1606

如何进行代码重构

当我们梳理自己或别人的代码时,很可能遇到如下情况:当然不会如此夸张,但当程序员遇到类似的代码时大概率会抓狂,由此会想到但当到最后一步时就没必要重构了,需要重写了。

qq_47209132的博客 1369

AG16K MCU ARM Cortex M3

其中,Input文件为Keil生成的mcu程序文件,输出为合成后的存储格式Bin文件,Program address 为上方表格中“程序运行 RAM 地址(4bytes)”,即 Keil 中设置的程序运行地址。其中 MCU 程序的地址,根据 mcu.ip 中设置的 FLASH_BIAS 进行设置。AG16K MCU 的 FPGA 工程中,需调用 alta_mcu_m3 的硬核 IP,包含在 alta_sim.v 的库文。Quartus II。//MCU 程序在 FLASH 中存放的首地址。

Embeded_FPGA的博客 1805

FPGA上的YOLOv8加速实现:从Verilog到高层综合

YOLOv8 采用了更高效的C2f模块与轻量化Backbone结构,模型特征包括:结构紧凑、检测头融合高低层特征;支持Anchor-free检测机制;支持INT8、FP16低精度推理;计算密度高,适合FPGA并行优化。

2501_93174773的博客 917

代码重构新手教程:如何将烂代码变成好代码?

作者 | 王莉敏策划 | 蔡芳芳作为有几年工作经验的程序员,都会对 bad code 不满意。如何将烂代码变成好代码,本文将由浅入深、一步步带你理解重构的奥秘,让你对重构有个基本的了解。本...

977

手把手教你用ADIsimCLK和GUI搞定HMC7044时钟配置(附避坑指南)

本文详细解析了HMC7044时钟芯片的配置方法,通过ADIsimCLK和HMC7044 Configuration GUI工具,从频率规划到硬件验证全流程实战演示。特别针对PLL模式选择、分频链配置等易错环节,提供量产验证的配置模板和实测数据,帮助工程师快速掌握高性能时钟解决方案。

weixin_30755393的博客 798

改善你的代码:使用这5种重构技术

重构是任何希望提高代码质量、性能和可维护性的开发者的基本实践。通过花时间分析和优化代码,可以消除冗余,降低复杂性,并创建更高效且可扩展的应用程序。通过不断审查和改进你的代码,你可以创建一个更强大、更具弹性的应用程序。希望这篇文章能帮助您了解一些重构技巧。代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具Fundebug。

粉丝们务必加入微信粉丝群 1692

Python实战:用MOOTDX库轻松抓取股票分时数据并绘制专业图表(附完整代码)

本文详细介绍了如何使用Python的MOOTDX库获取股票分时数据,并通过Pandas进行数据清洗与VWAP计算,最后利用Matplotlib绘制包含价格线、均线和成交量的专业分时图。文章提供了从环境搭建、数据获取到可视化呈现的完整代码,帮助读者快速构建本地化的股票分时数据分析工具。

weixin_29041195的博客 472

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1215

代码重构无从下手?这 4 个技巧,让烂代码变 “艺术品”

代码重构是提升代码质量的关键环节,但许多开发者面对混乱的 “烂代码” 时常感到无从下手。本文将分享 4 个实用的代码重构技巧,包括明确重构目标与范围、运用模块化拆分逻辑、借助自动化工具检测问题、通过测试保障重构安全。这些技巧能帮助开发者系统性地梳理代码结构,解决冗余、混乱等问题,逐步将难以维护的代码转化为整洁、高效的 “艺术品”,同时兼顾开发效率与系统稳定性,为代码重构工作提供清晰的方向和实操方法。​代码重构无从下手?这 4 个技巧,让烂代码变 “艺术品”​在软件开发领域,“烂代码” 如同附骨之疽,不仅会拖

2503_92849275的博客 2049

KNN算法

其原理是在给定的数据集中,根据某个距离度量方法,将测试数据与已知数据集中的所有数据进行距离计算,然后选取K个距离最近的数据作为测试数据的邻居,根据邻居的类别进行投票,将测试数据分类到得票最多的类别中。总之,KNN算法是一种简单而有效的分类方法,它不需要对数据进行训练,可以适用于多种数据类型和应用场景,并且可以通过调整K值或距离阈值等参数来控制算法的复杂度和性能。,KNN算法需要找到K个距离测试样本最近的训练样本,计算它们的类别,并将测试样本归入到得票最多的类别中。则取值为1,否则为0,表示邻居中属于类别。

优快云XXCQ的博客 2629

重构:怎样有效改善“烂”代码

关于烂代码,每个人都有一箩筐的话可说:不知用途的变量无脑复制的方法莫名改变的状态碰一下就出问题的逻辑一不留神就漏改的取值如果开个吐槽大会,能吐一整天。吐槽这些问题时,我们都会问:这是谁写的?

灵感干货铺 720

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Python重构实战技巧】:掌握5大核心模式,告别烂代码

掌握Python重构实战技巧,有效解决代码冗余与可维护性难题。涵盖函数提炼、类重组等5大核心模式,适用于复杂逻辑与老旧项目优化。提升代码质量与开发效率,告别烂代码,值得收藏。

SimCompile的博客 1024

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

前端代码重构吐槽:别再让你的代码越写越烂!

前端代码重构就像整理房间——每个人都知道需要做,但真正动手的没几个。代码异味、技术债务、死代码... 一堆问题让你头疼不已,结果你的代码还是越写越烂,难以维护。我就想不明白了,为什么代码重构要这么难?你看看现在的项目,要么代码重复得像复印机,要么逻辑混乱得像迷宫,还有那些硬编码的魔法数字,你是想让后来的开发者猜谜语吗?别跟我提什么"没时间重构",先把你的代码质量搞上去再说。还有那些害怕重构的,觉得重构会引入新的bug,结果代码越来越臃肿,最后只能推倒重来。

大山哥 4216

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

用Cursor重构烂代码的真实案例

重构烂代码就像整理一个杂乱的仓库。Cursor不是那个替你干所有活的机器人,而是给你提供了一个好用的手推车、一些收纳箱,还有一位随时能问的仓储专家。最大的收获不是把代码变漂亮了,而是找回了修改代码的勇气。原来那种“改一行可能崩全局”的恐惧消失了,因为现在有了一个能快速理解代码结构、指出潜在问题的助手。烂代码不会一夜之间变好,但有了合适的工具和方法,至少我们知道从哪里开始清理。而每一次清理,都让系统更健壮一点,也让下一个接手的同事少骂我们两句。

CeshirenTester的博客 968

pycharm代码重构技巧,快速把代码变成函数方法

pycharm代码重构技巧,快速把代码变成函数方法

MZH 711

驯服烂代码场景之二:要我改烂代码,但是烂代码烂得让我无法理解,该怎么办?

心法之一:“理解烂代码”与“写新代码”是一样重要的工作,嫌烂代码臭,就不去闻它,闭着眼睛捏着鼻子写新代码,似乎看起来效率高,其实是没头的苍蝇在乱撞,反而浪费时间。 心法之二(当没有时间重写烂代码时):烂代码虽然烂,但毕竟还能work,当进度压力大时,就没有推倒重写的时间。相比之下重构既不会影响烂代码的功能,也会让代码质量向好的方向转变。 手法之一:草稿式重构,即找一个新目录,把烂代码check

独立匠艺程序员。本土匠艺、中西合璧;编程悟道,心无挂碍。 1028

常见代码重构 50 点技巧

重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。大型重构:对顶层代码设计的重构,包括:系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有:分层、模块化、解耦、抽象可复用组件等等。这类重构的工具就是我们学习过的那些设计思想、原则和模式。这类重构涉及的代码改动会比较多,影响面会比较大,所以难度也较大,耗时会比较长,引入bug的风险也会相对比较大。小型重构。

2401_83384536的博客 1246

关于烂代码的那些事 - 为什么每个团队存在大量烂代码

最近写了不少代码,review 了不少代码,也做了不少重构,总之是对着烂代码工作了几周。为了抒发一下这几周里好几次到达崩溃边缘的情绪,我决定写一篇文章谈一谈烂代码的那些事。这里是上篇,谈一谈烂代码产生的原因和现象。 1、写烂代码很容易 刚入程序员这行的时候经常听到一个观点:你要把精力放在 ABCD(需求文档/ 功能设计/架构设计/理解原理)上,写代码只是把想法翻译成编程语言

赤耳A狼 644

从混乱到清晰,重构技巧全解析:7种模式彻底拯救烂代码

掌握代码重构原则与实战案例,轻松将混乱代码变为清晰易维护的结构。涵盖7种常用重构模式,适用于老旧系统优化、团队协作改进等场景,提升可读性与扩展性。方法实用、效果显著,值得收藏。

DeepLens的博客 1083

AI编程助手实战:用Copilot快速重构烂代码

今天我用一个真实案例演示——如何用GitHub Copilot在10分钟内完成“提取函数+消除重复+增加类型注解”的重构,全程不写一行核心逻辑。## 总结Copilot不是魔法,它更像是“会打字的资深程序员”——能快速消除样板代码,但业务逻辑的决策权在你手里。这段代码有3个明显问题:1. 计算逻辑重复两次(total计算和item[‘final’]计算)2. 折扣规则硬编码在多个分支中3. 没有类型提示,可读性差。:不要一次让AI改200行,先提取一个函数,再优化另一个。,再让它替换所有重复调用。

weixin_50238437的博客 221

Java中的代码重构:技巧、优秀实践与方法

代码重构是指在不改变程序外部行为的前提下,对内部结构进行调整以提升其质量的过程。这不同于重写代码,后者可能会引入新的功能或者彻底改变系统的运作方式。重构的核心在于优化代码的设计和实现,使之更加清晰易读、易于理解,并且为未来的修改铺平道路。通过重构,我们可以消除不必要的复杂性,简化逻辑流程,减少错误发生的可能性,同时增强代码的可测试性和可复用性。如果我们想要支持更多类型的运算(如减法、乘法等),而不只是简单地添加新方法,那么我们可以重构此函数来接受额外参数,以便指定所需的操作类型。

master_chenchen的博客 1544

10年老码农:如何从该死的烂代码中爬出来?

老前辈的警世良言一定要牢记:重构一时爽,头发不再长。 还有,工作了10年的码农,到了新公司,绝不会说这种话。 不过话说回来,能觉得模块代码烂,还能撸起袖子去改的程序员,真是很难得的一种精神。我身边 9...

clhq71932的博客 118
上一篇: 大厂字节程序员薪资曝光:排行世界第五厉害了
下一篇: 转行python工程师的必备一课
黑客老许
博客等级 码龄8年 6149粉丝 1028原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值