《代码整洁之道》(《Clean Code》)读书笔记

来源:互联网 发布:数据可视化 目标 编辑:程序博客网 时间:2024/05/21 15:39

因为想成为更好的程序员,所以我读了这本书,同时以《Clean Code》读书笔记作为我的第一篇博客,也是希望自己像书里说的那样去在意代码,时时保证代码整洁。

第一章 整洁代码
1、编写代码的难度,取决于读周边代码的难度,想要轻松写代码,先让代码易读。
2、整洁代码的定义并不是绝对的,包括但不限于:优雅,高效,代码逻辑直接了当,减少依赖关系,性能最优,无重复代码,实体尽量少。

第二章 有意义的命名
1、名副其实,也就是见名知义;
2、避免误导,避免使用与本意相悖的词,避免使用不同之处较小的名称;
3、做有意义的区分,名称相异,意义也必须有区分;
4、使用读得出来的名称,免讨论时的尴尬。。。。
5、使用可搜索的名称,长名称胜于短名称,搜得到的名称胜于自造编码写就的名称;单字母名称仅用于段方法中的本地变量,名称长短应与其作用域大小相对应;
6、避免使用编码,不使用成员前缀;
7、避免思维映射,明确才是王道;
8、类名和对象名应该是名词或名词短语,不应当是动词;
9、方法名应当是动词或动词短语,属性访问器、修改器和断言应该根据其值命名,并依据Javabean标准加上get、set和is前缀;
10、不使用俚语,每个概念对应一个词,别用双关语;
11、使用解决方案领域名称,也就是CS术语,算法名等;
12、使用源自所涉及问题领域的名称;
13、添加有意义有用的语境。

第三章 函数
1、短小;
2、职责单一,就是函数应该只做一件事;
3、每个函数都应在一个抽象层级上;
4、使用描述性的名称,别害怕长名称;
5、函数的参数应该越少越好;
6、使用异常替代返回错误码;
7、把Try/Catch 代码块的主体部分抽离出来,另外形成函数。

第四章 注释
用来弥补我们在用代码表达意图时遭遇的失败,少用注释,用代码来阐述
1、必要的注释:法律信息、提供信息的注释、对意图的解释、正确的阐释、警示、TODO注释;
2、对于不需要的代码应直接删掉,而不应进行注释;

第五章 格式
1、目的:关乎沟通,保证良好的可维护性和扩展性;
2、垂直格式:名称简单明了,最顶端给出高层次概念和算法,细节往下渐次展开;
3、封包说明、导入说明和每个函数之间都要有空白行隔开;
4、变量声明应尽可能的靠近其使用位置;本地变量在函数的顶部出现;实体变量应该在类的顶部声明;若某个函数调用了另一个,就应该将他们放在一起,调用者尽量放在被调用者上面;概念相关的代码应该放在一起;
5、横向格式:使用空格,水平对齐,缩进;

第六章 对象和数据结构
1、过程式代码便于在不改动既有数据结构的前提下添加新函数;
面向对象代码便于在不改动既有函数的前提下添加新类亦即;
2、过程式代码难以添加新数据结构,因为必须修改所有函数;
面向对象代码难以添加新函数,因为必须修改所有类;
3、得墨忒耳律:模块不应了解它所操作对象的内部情形;对象隐藏数据,暴露操作;
类C的方法f只应该调用以下对象的方法:
C
由f创建的对象
作为参数传递给的对象
由C的实体变量持有的对象

方法不应调用由任何函数返回的对象的方法;

第七章 错误处理
1、使用异常而非返回码;
2、使用不可控异常:可控异常的代价是违反开放/闭合原则,需要在使用的地方处理异常,成本高于收益;
3、抛出的每个异常,都应当提供足够的环境说明,以便判断错误的来源和处所;
4、别返回空值,别传递空值。

第八章 边界
在使用第三方代码的时候,应该让我们自己的代码与之保持较好的边界,避免不必要的问题。

第九章 单元测试
1、TDD三定律
定律一 在编写不能通过的单元测试前,不可编写生产代码
定律二 只可编写刚好无法通过的单元测试,不能编译也算不通过
定律三 只可编写刚好足以通过当前失败测试的生产代码
应该是要保证编写处于通过测试临界点的代码;
2、保持整洁 测试代码和生产代码一样重要;
3、整洁的测试 最重要的是 可读性 ;
4、整洁的测试遵循F.I.R.S.T 五条规则
快速:快速运行;
独立:相互独立,不依赖其他的测试;
可重复:测试应可以在任何环境中重复通过;
自足验证:测试应该有布尔值输出;
及时:测试应该及时编写;

第十章 类
在更高的层面来讨论代码的整洁
1、类应该尽可能的短小
单一权责原则:类或模块应有且只有一条加以修改的理由。系统应该由许多短小的类俄入世少量巨大的类组成。
高内聚:类应该只有少量的实体变量,类中的每个方法应该操作一个或多个实体变量。

第十一章 系统
将系统的构造与使用分开:应将启始过程与之后的运行时逻辑分离开;
工厂:使用抽象工厂模式让应用自行控制合适创建实例,构造的细节隔离在应用程序代码之外;
依赖注入:控制反转将第二权责从对象中拿出来,转移到另一个专注于此的对象中,遵循了单一权责原则;
第十二章 迭进 主要原则跟前面的章节都差不多
简单设计规则:
运行所有的测试
重构
不可重复

第十二章 并发编程
1、目的:并发是一种解耦策略,将目的和时机分解开;
2、并发防御原则
单一权责原则:分离并发相关代码与其他代码;
限制数据作用域:谨记数据封装;严格限制对可能被共享的数据的访问;
使用数据复本:避免共享数据;
线程尽可能地独立:尝试将数据数据分解到可被独立线程操作的独立子集;
3、学习使用一些线程相关基础算法,具体展开就可以去查阅操作系统相关的知识;

后续的章节是举例对具体的代码进行重构;

0 0
原创粉丝点击