读书笔记——编写可读代码的艺术
序.本书主要内容
简化命名、注释和格式的方法,使每行代码都言简意赅
梳理程序中的循环、逻辑和变量来减小复杂度并清理思路
在函数级别解决问题,例如重新组织代码块,使其一次只做一件事
编写有效的测试代码 ,使其全面而简洁,同时可读性更高
第一章 代码应当易于理解
1.可读性基本定理
关键思想:代码的写法应当使别人理解它所需的时间最小化。
2.代码总是越少越好吗
第一部分 表面层次的改进
第二章 把信息装到名字里
无论是命名变量、函数还是类,都可以使用很多相同的原则。我们喜欢把名字当做一条小小的注释。尽管空间不大,但选择一个好名字可以让它承载很多信息。
关键思想
把信息装入名字中
我们在程序中见到的很多名字都很模糊,例如tmp。就算是看上去合理的词,如size或者get,也都没有装入很多信息。本章会告诉你如何把信息装到名字中。
本章分成6个专题
- 选择专业的词
- 避免泛化的名字(或者说要知道什么时候使用它)
- 用具体的名字代替抽象的名字
- 使用前缀或者后缀给名字附带更多信息
- 决定名字的长度
- 利用名字的格式来表达含义
2.1 选择专业的词
“把信息装入名字中”包括要选择非常专业的词,并且避免使用“空洞”的词。
2.2 避免像tmp和retval这样泛泛的名字
2.3 用具体的名字代替抽象的名字
2.4 为名字附带更多信息
2.5 总结
第三章 不会误解的名字
关键思想:
要多问自己几遍:“这个名字会被别人解读成其他的含义吗?”要仔细审视这个名字。
3.1 推荐使用min和max来表示(包含)极限
MAX_ITEMS_IN_CART = 10;
MAX_C0MMODITY_IN_CART = 10;
private static final Integer MAX_ITEMS_IN_CART = 10;
3.2 推荐用first和last来表示包含的范围
3.3 推荐用begin和end来表示包含/排除范围
3.4 给布尔值命名
当为布尔变量或者返回布尔值的函数选择名字时,要确保返回true和false的意义明确
使用 is、has 、can 或 should 这样的词,可以把布尔值变得更加明确
最后,最好避免使用反义名字,例如 不要用:
bool disable_ssl = false;
而使用
bool use_ssl = true;
3.5 与使用者的期望相匹配
有些名字之所以会让人误解是因为用户对它们的含义有先入为主的印象,就算你的本意并非如此。在这种情况下,最好放弃这个名字而改用一个不会让人误解的名字。
3.6 总结
不会误解的名字是最好的名字,阅读你代码的人应该理解你的本意,并且不会有其他的理解。遗憾的是很多英语单词在用来编程的时候是多义性的,如filter、length和limit
在决定使用一个名字前要吹毛求疵一点,想象一下这个名字是否会被误解为其他意思。
第四章 审美
- 使用一致的布局,让读者很快就习惯这种风格
- 让相似的代码看上去相似
- 把相关的代码分组,形成代码块
4.1 为什么代码审美这么重要
4.2 重新安排换行来保持一致和紧凑
把重复的功能/方法抽取出来单独形成一个方法。
4.3 在需要时使用列对齐
4.4 选一个有意义的顺序,始终一致地使用它
4.5 把声明按块组织起来
4.6 把代码分成“段落”
4.7个人风格与一致性
一致的风格比“正确”的风格更重要
4.8 总结
第五章 该写什么样的注释
关键思想
注释的目的是尽量帮助读者了解得和作者一样多
5.1 什么不需要注释
不要为那些从代码本身就能快速推断的事实写注释
5.2 不要为了注释而注释
5.3 不要给不好的名字加注释–应该把名字改好
好代码>坏代码+好注释
5.4 记录你的思想
5.5 加入“导演评论”
5.6 为代码中的瑕疵写注释
代码始终在演进,并且在这个过程中肯定有瑕疵。不要不好意思把这些瑕疵记录下来。
例如,当代码需要改进时:
// TODO: 采用更快算法
或者当代码没有完成时:
// TODO(dustin):处理除JPEG以外的图像格式
5.7 给常量加注释
/** 排期编号自增加key */
private final static String SCHEDULE_SN = “learning:course:course_schedule_code”;
5.8 公布可能得陷阱
当为一个函数或者类写文档的时,可以问自己这样的问题,“这段代码有什么出人意料的地方?会不会被误用?”基本就是说你需要“未雨绸缪”,预料到别人使用你的代码有什么问题。
5.9 总结
第六章 写出言简意赅的注释
核心思想
注释应该有很高的信息/空间率
6.1 让注释更加紧凑
6.2 避免使用不明确的代词
6.3 精确地描述函数的行为
6.4 声明代码的意图
6.5 采用信息含量高的词
6.6 总结
第七章 把控制流变得易读
把条件、循环以及其他对控制流的改变做的越“自然”越好。运用一种方式使读者不用停下来重读你的代码
7.1 条件参数中参数的顺序
7.2 if/else语句块的顺序
第八章 拆分超长的表达式
把你超长的表达式拆分成更容易理解的小块
8.1 用做解释的变量
8.2 总结变量
8.3 使用摩根定理
8.4 滥用短路逻辑
// TODO
附录
1.链接: https://pan.baidu.com/s/1SHlVgqAEgnlj_kP_67U3rw?pwd=oin4 提取码: oin4