前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《重构》第三章 - 读后感(坏味道识别1-2)

《重构》第三章 - 读后感(坏味道识别1-2)

作者头像
写一点笔记
发布2022-08-11 15:46:35
2340
发布2022-08-11 15:46:35
举报
文章被收录于专栏:程序员备忘录

第一次在北京过年,和宿管阿姨一起度过。感谢姜阿姨做的丰盛年夜饭,感谢梅姐的勉励,新的一年,祝姜阿姨、梅姐和其他的同事心想事成、万事如意!

度过了难忘的除夕,吃到了美味的饺子,是一种美好的缘分。看完春晚,休息一晚,大年初一又和姜阿姨吃了饭。自己都不好意了。再次谢谢姜老师!

其实很早之前我就已经察觉到春天来了。春天的早上,太阳升起的地方往往特别的清亮,大地似乎蓄势待发,饱含一股冲动,只等太阳升起的那一刻。


扯得有点远了,闲着没事还是看书吧,《重构》这书特别好,它从另一个角度对我们的代码进行指导,不仅仅是对我们编码思维的一种提升,而且能更好的让我们理解和使用面向对象。在本书的第二章中对重构下了一个定义。那就是在功能不变的前提下,对代码的实现细节进行重新修改,提升代码的可理解性。知道了重构的定义之后,书中对重构的好处做了介绍,这块我们都知道自己水平怎么样,所以全部接受。那么问题就是我们何时进行重构我们的代码?书中提出了一个法则:“三次法则”。

书中对三次法则的解释是:事不过三,三则重构。意思就是第一次的时候就放心去做,第二次的时候做类似的事就比较烦,但是还是可以去做。但是第三次的时候如果还是类似的事情的时候,就应该去重构了。所以这块的意思还是说程序员要自己去决定何时重构。如果强忍着不去重构,那也不是不可以。落实到开发进度的时候,重构这个行为的触发机制就是添加新需求的时候、修补错误的时候、代码审核的时候。但是如果开发人员写的代码都完美无瑕,那么重构就无所谓意义了。所以我们还是要好好看书。当然凡事必有两面,书中对不应重构的方面也做了说明,不该重构的因素主要还是经济以及利益因素。我们都知道我们的代码中二进制指令,而重构使得我们的代码理解性强,但是带来的影响则是函数直接的跳转,对应到指令中就是jump。所以说重构之后的代码肯定在计算上有些消耗,但是这些微小的性能差异其实并没有大的关系!

《重构》这本书的第三章本人认为是非常重要的,就好比我们要出去打猎,那么我们知道我们的目标猎物是什么,总不能出去打个空气回来吧!所以这块主要是反思我的代码中的坏味道有那些。本次文章,作者主要写两个,后边再逐个过吧!

1.重复的代码(duplicated code)

在编码中如果一个项目没有规范,而且参与的人很多的情况下。后来者往往不了解前人的代码复用关系。或者新业务复用不了前人的代码,那么往往会产生一个现象,就是新人不碰前人编写的代码,主要原因是其也不知道他动了之后会不会产生什么化学反应。最后新人采取的措施是将前人的代码直接复制过来,基本内容一样,但是函数名称不同。最后的结果就是一个项目越来越杂,以至于达到不敢碰的程度。这种问题其实也是无解的,如果开发人员都不以完成任务为工作之要,唯一的解决方法就是代码审核去强制的进行规范。

书中对重复的代码进行了一些总结,主要包含如下几个方面:

1.1同一类中包含多个函数包含相同表达式

解决之道:这种情况下就应该将重复代码独立成一个函数。

1.2兄弟类中包含相同表达式

解决之道:将重复代码放到抽象类或者父类。如果情况比较特殊的话可以使用模板模式,模板模式在spring、mybatis中都有使用,非常有用。

1.3两个不同的类包含重复代码

解决之道:将重复代码抽象到一个独立的类中,对于这块我们可能需要考虑对立的类应该归属那个类还是独立出来的问题。因为之前我们说过一个类就应该自己做好自己的事的这样一个边界问题。所以对于独立的问题,需要好好考虑!

2.过长的函数(long method)

为啥说过长的函数是坏味道?在之前计算机性能还比较低级的年代,确实大家都喜欢使用长函数,因为长函数避免了上边说的jump等操作,相当于节省了计算的时间。但是如今的进程内函数调用已经进行了极大的优化,基本忽略不计了。所以说让代码更容易理解才是主要问题,也更符合现如今的背景环境。

对于过长的函数,我们的解决办法就是规约和拆分。那么拆分的触发条件是什么?书中表达的观点就是每当遇到注释的时候就应该独立成一个函数。为什么的原因就是一个函数中的某块代码做了一些事情,但是每个函数只应该做一件事情。所以这块代码放在这块就是不合理的。对于抽离出来的函数,其名称也要准确描述其功能,做到见文知意。

当然最为常见的就是条件表达式和循环语句了。这是我们对过长函数进行抽离的最为明显的可疑点,这块作者确实应该好好学习。

除此之外,如果代码中包含大量的参数和临时变量,就应该将其作为参数传递到抽离出来的函数中去。这么做的原因是临时变量会让代码逻辑复杂、理解性不好。当然书中也提到了一些其他的方法去消除临时变量相关的代码。这块以后有相关的理解了再写相关的感悟吧。目前还理解不来。

总结:对于重复代码和过长函数,作者认为这些是我们最为常见的代码问题。对于重复代码的问题要根据不同的情况进行抽离,同类、兄弟类、无关系类等需要按各自的特点进行去重复代码。对于过长的函数,书中提示我们要进行分解,主要的分离标志是注释、条件语句、循环语句等,在分类中长函数的过程中要将临时变量作为参数传入抽离的新函数中,让代码更精炼,可读性更高!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写点笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档