zoukankan      html  css  js  c++  java
  • 《重构 改善既有代码的设计》 读书笔记

    《重构 改善既有代码的设计》

    读书笔记

    娄雨禛 PB16060356

    何谓重构

      重构(名词):对软件内部的一种调整,目的是在不改变软件可观察行为前提下,提高其可理解性,降低其修改成本。

      重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,改变其结构。

      以上两个定义是作者提出的。让我们注意其中的三个关键词:可观察行为、可理解性、修改成本

      对于入门的代码编写者来讲,重构这件事是一件很玄乎的操作。一段长长的代码,为什么被七搞八搞就效率更高?初学者之所以会认为“重构”很玄乎,是因为他们没有去了解“重构”的基本原则,更不知道以上所述的三个关键词有什么深刻的含义。

      可观察行为不变  可观察行为这个词是针对于用户而言的。一个用户,在拿到一个产品时接触到的一切,都包纳在这个“可观察行为“之中。而代码设计者在调整代码的前后,要让用户觉得体验完全没有改变,即底层更改不应影响到表层交互。

      可理解性提高  即使两段代码对于机器来说实现效率完全一样,其对于代码阅读者的体验可以截然不容,这就是代码风格优劣对于程序维护的影响。好的代码风格,有助于阅读者一眼就理解代码中每个变量、每个函数的作用,这种程序员之间代码交流的“高效”,绝不亚于代码本身“高效”,每个程序员当切记于心。

      修改成本  初学编程的人总会遇到大篇幅更改变量的情况,这是由于他们没有“宏定义”的概念,对于代码架构没有预先的感知。“重构”的本质,是用尽可能少的改动来实现效率的提升,即等修改成本下的效率最大化。

    为何重构

      改进软件设计

      使软件更容易理解

      帮助找到BUG

      提高编程速度

      提高程序运行效率

      以上五点,摘录自本书。就我自己的实际编程经验来看,“重构”最大的两个意义,一个是“使软件更容易理解”,另一个是“提高程序运行效率”。下面拿我的第一次个人项目举例。

      个人项目中,我一开始选错了数据结构,采用了“多重链表”的结构,结果在数据量巨大的时候,程序根本跑不完。后来改用了“哈希表”的数据结构,大大提升了程序运行的的效率。重构对于程序运行效率的提升是很明显的,尤其是当一开始的方案远非最佳方案的时候。然而,一个程序优化得越好,它在效率提升方面的空间也就越小。在这个时候,就需要越来越关注程序对于程序员阅读上的优化——变得更容易理解。

      一个有效的方法是多加精辟的注释,这也是我的基本编程习惯之一——不求编得有多快,但要求编写的内容能够有效地被再利用,以后拿来直接能上手,而不是重新理解半天。注释的重要性已经被很多人提及,而在这里,我还想强调一下注释之外同样有价值的东西——重构对于程序语言易读性的优化。

      在个人项目中,我暴露出一个问题。代码工作越深入,我就越是发现之前没有充分对整个程序进行宏观把控与架构。我总是发现我缺少一些很重要的变量、数组、指针、结构体,这些都被临时加上。而我就需要临时为这些变量取易理解的名字。这些名字有的会与之前已有的名字产生含义的冲突,然后把编程的思路搞混。也就是说,有序而周到的宏观架构能够有效引领后边的编程工作,而混乱或不完善的宏观架构几乎必然导致之后编程工作的条理不堪。在这个时候,“重构”的思想就要求,在编程工作到了每一个小阶段时,对程序本身进行一个架构的梳理。不当的地方重新修改,不足的地方重新补上,然后再进行下一步的编程。这个过程看似在徘徊,实际则在有效节省总的编程时间。这一点非常重要。

  • 相关阅读:
    转载在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
    笔试题Multicore简答题(上)
    笔试题Multicore简答题(下)
    转载深入理解const char*p,char const*p,char *const p
    笔试题mulicore编程题
    躺在被窝看蜗居,一连看到大结局,饿了揪把馒头,咽不下去吃点咸菜,我一边吃馒头,一边吃咸菜,一把抹鼻涕,一把抹眼泪
    //向块中用程序添加属性
    带参数的多线程
    扩展数据名 删除
    无法加载程序集。错误详细信息: Autodesk.AutoCAD.Runtime.Exception: eDuplicateKey
  • 原文地址:https://www.cnblogs.com/RainLou/p/8807865.html
Copyright © 2011-2022 走看看