《代码整洁之道》摘抄笔记

一、有意义的命名
名副其实
避免误导
做有意义的区分
使用读得出来的名称
使用可搜索的名称
避免使用编码,如(成员m、接口I)类型、前缀等
类名尽量用名词或名词短语,方法名尽量用动词或动词短语。
每个概念对应一个词
别用双关语
使用解决方案领域名称
使用源自所涉问题领域的名称
添加有意义的语境

二、函数
函数应尽可能短小,职责单一,参数少、,
多态替代条件分支
使用描述性的名称
选好动词和关键字
使用异常替代返回错误码
抽离异常捕获代码块,另成函数
DRY

三、注释
尽量让代码自释义
好的注释有法律信息、提供基本信息、阐述意图、警示、用//TODO放置要做的工作列表、公共API的文档注释
删掉注释的代码

四、格式保持良好格式,使代码更具可读性
空白行隔开了概念,增强可读性
变量声明尽可能靠近使用处,实体变量应在类的顶部声明
相关函数与代码尽量放在一起
概念相关的代码应放在一起
自上而下展示函数依赖顺序
空格符加强分隔效果
对齐,缩进

五、对象与数据结构
对象应暴露行为,隐藏数据
数据结构仅提供数据,不包含业务逻辑,如DTO、BEAN
遵循迪米特法则,最少知识

六、错误处理
使用异常而非返回码
先写try-catch-funally语句
给出异常发生的环境说明
根据调用者需要定义异常类
别返回null
别传递null

七、边界
API接口等,应避免过多了解

八、单元测试
测试代码应像生产代码一样整洁,遵循first规则---快速、独立、可重复、自足验证、及时

九、类
做好封装
尽可能短小
类名、方法名和变量简短扼要描述其权责
单一职责
方法与变量高内聚
隔离修改,依赖倒置

十、系统
将系统的构造和使用分开:分解main、工厂、依赖注入
面向方面编程AOP
代理
测试驱动系统架构
模块化和关注面切分

十一、迭进
运行所有测试
消除重复
使代码更具表达力
尽可能少的类与方法;
重构

十二、并发编程
对象是过程的抽象,线程是调度的抽象。
分离并发代码与其他代码
严格限制对共享数据的访问
使用数据副本,隔离而非共享
线程尽可能独立
学习生产者—消费者、读者—作者、哲学家算法及解决方案
避免使用一个共享对象的多个方法
尽可能减小同步区域
尽早考虑关闭问题
编写有潜力暴露问题的测试
不要将系统错误归咎于偶发事件
先使非线程代码工作
编写可插拔、可调整的线程代码
运行多于处理器的线程,在所有目标平台测试

十三、味道及启发
1、注释
不恰当信息,废弃注释,冗余注释,糟糕的注释,被注释的代码

2、环境
需要多步才能实现的构建,需要多步才能做到的测试

3、函数
过多的参数,输出参数,标识参数,死函数

4、一般性问题
一个源文件中存在多种语言,明显行为未被实现,不正确的边界行为,忽视安全,重复,在错误的抽象层级上的代码,基类依赖于派生类,信息过多,死代码,垂直分隔,前后不一致,混淆视听,人为耦合,特性依恋,晦涩的意图,位置错误的权责,不恰当的静态方法,使用解释性变量,函数名称应表达其行为,理解算法,把逻辑依赖改为物理依赖,用多态替代选择分支,遵循标准约定,用常量替代魔数,结构甚于约定,封装条件,避免否定条件,函数只做一件事,函数应只在一个抽象层级上,在较高层级放置可配置数据,避免传递浏览

5、java
通过使用通配符避免过长的导入清单,不要继承常量,合理用枚举

6、名称
采用描述性名称,名称应与抽象层级相符,尽可能使用标准命名法,无歧义的名称,为较大作用范围选用较长名称,不应在名称中包括类型或作用范围信息,名称应该说明副作用

7、测试
测试不足,使用覆盖率工具,别略过小测试,测试边界条件,全面测试相近的缺陷,测试失败的模式有启发性,测试覆盖率的模式有启发性,测试应该快速,被忽略的测试就是对不确定事物的疑问

你可能感兴趣的:(《代码整洁之道》摘抄笔记)