Chap 24 重构 读书笔记

一、需求的变更

单纯就科目学习中的小项目来说,目标在一开始便被明确下来,即可定义一份严谨的列表来描述功能。故在原来的编程经历中,只要上交了程序便一切都没事儿了,也没有重构的发生。

在结对项目中,也算是第一次进行了重构的体验。一开始仅仅编写了对于整数运算式的程序,在后续逐渐加入小数和分数时,便可以说进行了重构。但是实际上效果不佳,单纯的修改让整个函数的行数几乎增加了两倍,逻辑链相应也复杂了不少,也算是切实的感受到文中所说的,“掌握重构技巧的重要性”。显然,重构并不是单纯的重写。

二、重构的技巧

首先在数据级别的重构中,重要的一点是让数据尽可能的明确,无论是把变量命名为具体的功能,还是用函数替代表达式,都可以很好的做到这一点。

还有一点较为在意。就是说用多个单一变量代替多用途变量,还特别提到了惯用的循环遍历I,j和交换变量temp,虽然可能会不习惯,但自己以后的编程过程中,确实是可以参照这个原则。例如,用“loop_xxxxx”和“temp xxxx and xxxx”来命名,增加可读性。

语句级的重构中,有一点觉得很好,“在嵌套的 if-then-else语句中一旦知道答案就立即返回,而不是去赋一个返回值” 个人也算是有体会,多种嵌套下,指不定就会在满足一个条件以后,又满足了后面不知道哪个不期望的条件,然后把所希望的值给替代掉。例如:在个人任务中,有如下逻辑

“是否是字符 是否是字母 是否是数字 如果都不是,就是分隔符,判断是否已经构成了一个单词”

改结构便把判断这个重要功能放到了 if 嵌套的最里层,最后也确实是在这里出了问题(可见个人任务总结)。

三、何时重构

这里提到的有一点个人深以为然,即“不要把重构当先写后改的代名词”。简单来说就是不要滥用重构,至少你所重构的对象,是一个已经能够运行用的代码,而不是把为了让无法运行的代码能够运行叫做重构

读书笔记 Week6 2018-4-12的更多相关文章

  1. 读书笔记 effective c++ Item 12 拷贝对象的所有部分

    1.默认构造函数介绍 在设计良好的面向对象系统中,会将对象的内部进行封装,只有两个函数可以拷贝对象:这两个函数分别叫做拷贝构造函数和拷贝赋值运算符.我们把这两个函数统一叫做拷贝函数.从Item5中,我 ...

  2. 《构建之法》需求分析 读书笔记 Week6

    本周选读<构建之法>第8章——需求分析.由于有团队项目初期调研阶段做调查问卷的经历,这一章节中很多知识点我都比较有体会.对我而言,这一章节最有价值的内容就是厘清了关于需求分析的两个误解和近 ...

  3. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  4. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  5. 读书笔记:《人有人的用处》------N.维纳. (2016.12.28)

    读书笔记:<人有人的用处>------N.维纳 ·某些系统可以依其总能量而和其他系统区别开来. ·在某些情况下,一个系统如果保持足够长时间的运转,那它就会遍历一切与其能量相容的位置和动量的 ...

  6. 读书笔记-《Maven实战》-关于Maven依赖传递的思考 2018/4/26

    上次读书笔记中,提到了依赖传递.看着依赖传递表,一直在思考为什么会是这样. 先看传递表: compile test provided runtime compile test provided run ...

  7. 【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记

    先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了. 链接: https://blog.csdn.net/ ...

  8. TJI读书笔记17-字符串

    TJI读书笔记17-字符串 不可变的String 重载”+”和StringBuilder toString()方法的一个坑 String上的操作 格式化输出 Formatter类 字符串操作可能是计算 ...

  9. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

随机推荐

  1. 开发中常见的ES6语句

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. testem方便的web tdd 测试框架使用

    备注:    单元测试,对于日常的开发是比较重要的,testem 简化了我们的代码编写,以及运行.    主要特性:    a. 支持的测试框架有:jasmine quint mocha buster ...

  3. Google、IBM和Lyft开源其大型微服务系统管理工具Istio

    Istio 的优势 集群规模可视性:在故障状况出现时,运营人员需要利用多种工具以始终关注集群运行状况并分析微服务状态图表.Istio 项目能够监控与应用程序及网络活动相关的数据,利用 Promethe ...

  4. Wordpress主题站

    深度剖析WordPress主题结构 http://down.chinaz.com/try/201106/640_1.htm wordpress工作原理 http://blog.csdn.net/liu ...

  5. js动态的属性名如何取该属性的值

    var cls={cn1:"nihao",cn2="made",cn3="shuide"};var index=2;//可变获取cn2的值 ...

  6. Ubuntu下手动安装Nvidia显卡驱动

    1. 下载最新版的nVidia驱动. http://www.nvidia.com/page/drivers.html 2.编辑blacklist.conf. sudo gedit /etc/modpr ...

  7. maven打包报错:在类路径或引导类路径中找不到程序包 java.lang

    刚下了个新项目,跑了下maven报错了: E:\workspace\portalframe>mvn clean install [INFO] Scanning for projects... [ ...

  8. win10下启动zkui

    zkui是一个开源的zookeeper可视化工具,现在看下我们怎么启动这个工具.首先下载源码(我把它放在E:\workspace): git clone https://github.com/Deem ...

  9. Micro-PaaS(Docker+K8S)

    1.概述 Docker是一种Linux容器工具集,它是为构建(Build).交付(Ship)和运行(Run)分布式应用而设计的. Kubernates:是开源的容器集群管理系统.它构建在Docker技 ...

  10. 【Leetcode 136】Single Number

    问题描述:给出一个整数数组,除了一个元素外,其他每个元素都出现了2次,找出只出现1次的元素. int singleNumber(vector<int>& nums); 分析:比较自 ...