《重构 改善既有代码的设计》阅读笔记(1)

重构 改善既有代码的设计(1)

重构的例子

简单的剧院例子

书中所编写的sample是一个剧团的收入系统。程序的基本的输入为曲目列表和某一个地区、剧院的账单列表。程序的基本输出
则是具体的账目列表。整个程序采用js进行编写。

剧院例子带给我们的启示

整个程序看起来,组织有一些不清晰,但其实还可以忍受。但是,如果要增加更多的需求,例如,要以html的形式输出,要增加
剧种,那么,糟糕的程序结构带来的问题,会是雪崩式的。越改越乱,越改越糟。基于这点,作者回答了为什么要重构的问题:

  1. 如果需要对一段程序添加新的feature,但难以下手,不妨先refactor

  2. 需求的变化,导致了重构的必要性

如何开始重构

  1. 确保已经有了一套可靠的测试,可方便的进行自我检查,这点是极其重要的。

    需要测试的原因是:测试是在将目标重复两遍,代码一遍,测试一遍,因此,程序员需要犯两次错误,才可以骗过机
    器。这大大降低了程序员可能犯错的可能性。尽管程序的测试可能需要花费不少时间去构筑,但是,实际上,会节省下客观
    的调试时间。构筑测试体系不论是是对于个人,还是对于一个团队,都是无比重要的。

  2. 分解长而复杂的函数,抽象其中的代码块

    当函数中的一块逻辑较为独立时,我们可以将其抽象为一个单独的函数。例如,如果计算过程包括了计算积分,计算支出。很显然,
    计算积分可以独立成一个函数,计算支出也可以独立成为一个函数。这种抽象可以让逻辑更为清晰,同时,也让逻辑可以在未来复用。

  3. 将抽象出来的代码块的变量进行改名,方便阅读

    将函数结果改名为result,当然了,这只是个人风格
    对动态类型语言,设法在取名时,带上类型名。一般情况下,不定冠词修饰是一个不错的选择。例如,a,an等
    也许有人会有疑问,这么修改是否是值得的?但是作者给出了绝对的答复,即好的代码,不应该只让机器明白,还需要让程
    序员容易理解。凡是能提升代码可读性的修改,都是十分值得的。

  4. 消除无用变量

    扫描二维码关注公众号,回复: 8554565 查看本文章

    消除无用变量,指的是尽可能用函数调用嵌套去替代原先的零时变量。这么做可能带来的问题是性能下降,但是带来的好处
    是显而易见的,提炼时会更为简单,因为需要操心的局部作用域减少了。在性能和可读性能存在一些潜在矛盾的问题上,作者
    认为,及时性能上存在一些下降,首先将可读性问题解决,让结构更为清晰,性能调优自然也会更为轻松。

  5. 将循环体按照逻辑拆分

    将循环中,不同的逻辑部分单独拆分,保证语义独立。

  6. 将语义接近的部分放到一起

    在完成了上一步后,再将循环体相关的声明放到循环前,可以让程序更为清晰易懂。完成这步后,我们可以进一步进行函数抽象和拆分。

阶段总结

以上是重构这本书,到1.5小节,主要讲解的内容。作者分步讲解了,什么是重构,哪里和为什么需要重构,以及如何开始重构。
截至当前,原先的简单程序被改写成了内嵌了大量函数的大函数体。作者小步骤迭代,编译、测试、提交的步骤,将大的目标逐渐
细化,最终完成了阶段目标。期待后续的阅读。

猜你喜欢

转载自www.cnblogs.com/liwbeijing/p/12185136.html