第8章 搬移特性
8.1 搬移函数
把函数搬到与之关联比较密切的地方去,这样做既能让代码比较容易理解,也有利于封装(这一点我还不明白等懂了再来补充)。
举的例子是内部函数搬到顶层和搬移函数到另一个类。内部函数搬移到顶层是可以方便其他函数调用,类之间搬移函数是因为这个函数和另一个类关系更密切。
8.2搬移字段
随着开发可能发现原先的数据结构不合理了,有的字段已经不适合待在当前的类里面,那么就应当移走它。比如总是一同出现的数据最好整合到一条记录里去而不是分开,不然维护难度很大也让人产生困惑“这么高度关联为什么不放在一起呢”,再比如修改一条记录时总要同时改动另一条记录,那说明也需要重新斟酌整合,这样修改只需进行一次。
被搬移的字段要先封装好。说起来封装字段还是挺重要,之前遇到过“可能是因为一个字段在别处被改变而导致的bug”,但是字段本身有着良好的封装,所以很快排除掉并未在别处被改变了,最后定位到是字段的上一层被改变导致的bug。
8.3搬移语句到函数&8.4搬移语句到调用者
这俩是互操作。多个调用点的上下文有重复语句就合到函数去,需求变更了不同调用处有不同情况时再从函数里拆出去。
8.5以函数取代内联代码
封装成函数的好处:提高可阅读性、消除重复代码。
8.6移动语句
把相关代码移动到一起有助于理解。移动的时候注意代码是不是执行次序敏感的。
8.7拆分循环
一个循环里不要干太多事,拆开,重构之后逻辑清晰了,影响到性能可以再合并。
8.8以管道取代循环
管道两端连接的是数据集,数据从一端进入,经过管道的处理从另一端出来,这就是管道的意思。
常见的管道有map、filter、reduce(个人觉得reduce也算个管道)。map就是映射,一组数据映射成另一组数据(这不就是函数嘛),filter就是从数据集中筛选想要的子集,reduce就是把一个集合最后变成一个结果。(第一次接触map reduce的概念还是在云计算的课上。)
用管道而不是循环写出来的代码好看又容易懂。
8.9移除死代码
开发越久,代码库里可能会有越多并没有被使用的代码,比如一个函数,而且很可能并没有被注释掉,然后花了很多时间去读懂这段代码却发现它没用了……
所以对于这种死代码,清除掉吧,让版本控制记着它的存在就好。
-FIN-