重构培训有感

  重构,对于一个工作刚刚满一年的我来说,本是一个陌生的概念。但好在,在参加本次培训之前,项目组内部已经开始对重构提起了重视,我也有幸读了《重构,改善代码的既有设计》这本书。其实,看过这本书的人可能都会有一个感觉,就是书中所概括的种种我们都知道,但是我们是否在意过这种细节,是否约束过自己,每个人心里都有一个答案吧。通过培训,还是对重构有了一个整体的认识。

      我想,在重构之前,我们要明白为什么要对代码或者说软件进行重构。之所以要重构,是因为我们的软件中出现了这样或者那样的坏味道,具体的坏味道这里不做赘述,不同的人对于坏味道的归纳总结也不尽相同。但是我认为,凡是不便于理解,不便于修改和扩展的代码都充满了坏味道。我们首先要有识别坏味道的能力,才能去谈重构的事情。

      我所理解的重构,是在保证软件的可察行为不变的前提下,对其内部结构进行调整,从而使软件便于理解和修改。首先抛开重构的技巧和目的不谈,我们是如何保证软件的可察行为即软件的固有逻辑不变呢?对,单元测试!重构是需要有单元测试支撑的,这是很关键的一点,毕竟大多数时候,机器比人的直觉可靠。讲到这里,我们就不得不提到一个小的原则,就是Baby Steps, 即每次只对一小部分逻辑进行重构,重构完之后立即执行单元测试,测试通过则进行下一个小步,否则就需要对之前的重构进行调整,直至单元测试通过,这保证了重构的有序进行。

      接下来,我们重点学习了函数的重构技巧,这一部分是伴随着代码整洁的许多原则同步进行的。印象深刻的就是十个一原则,即每个变量只用于单一用途、每一行代码只表达一件事情、一个循环只做一件事情、单一抽象层次原则、代码组织得一次只做一件事情、一种变化的仅仅修改一处、函数应该遵守单一职责、函数的圈复杂度小于一十、函数第一原则是必须要短小、编写函数时必须一心一意。说实话,凑这十个一多少有点牵强,但是中间包含的原则是很重要的。之后觉得挺有价值的就是函数中卫语句的的使用,这点去除了繁杂的条件分支,让函数尽快返回,增强了可读性。至此重构函数的大部分都已经有所了解,唯一有些遗憾的是课程没有安排类的重构部分,所以需要自己加强这方面的学习和理解。

      最后说几点题外话,有些人认为重构会对软件性能产生影响,对于这一点我不同意也不否认,在硬件已经不是瓶颈的今天,软件首先应该是易理解和可维护的,其次才是高效的,而且前者是有利于后者的实现的。再者,如今大多数编译器已经将函数调用代价缩减到趋于0,所以不用考虑函数多而带来的性能问题,编译器比我们更理解代码,它知道怎么去优化执行。总的来说,我们应该转变一下自己的观念,以前我们指示计算机去执行指令,如今我们应该是向人们解释我们要指示计算机做什么。最后,希望自己通过刻意的练习和理解,能随心所欲写出整洁的代码。

转载于:https://www.cnblogs.com/exdream/p/4719637.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值