代码整洁之道 pdf 全文内容详细分享

415 阅读10分钟

代码整洁之道

pan.baidu.com/s/1b6e2CgZ0…

“阅读这本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。很好,IT行业需要更好的程序员!”——罗伯特·C. 马丁(Robert C. Martin)

尽管糟糕的代码也能运行,但如果代码不整洁,会使整个开发团队泥足深陷,写得不好的代码每年都要耗费难以计数的时间和资源。但是,这种情况并非无法避免。 著名软件专家罗伯特·C. 马丁(Robert C. Martin) 在本书中为你呈现了革命性的视野。他携同Object Mentor公司的同事,从他们有关整洁代码的佳敏捷实践中提炼出软件技艺的价值观,以飨读者,让你成为更优秀的程序员——只要你着手研读本书。 阅读本书需要你做些什么呢?你将阅读代码——大量代码。本书会促使你思考何谓正确的代码,何谓错误的代码。更重要的是,本书将促使你重新评估自己的专业价值观,以及对自己技艺的承诺。 书中的具体内容包括: ·好代码和糟糕的代码之间的区别; ·如何编写好代码,如何将糟糕的代码转化为好代码; ·如何创建好名称、好函数、好对象和好类; ·如何格式化代码以实现其可读性的大化; ·如何在不妨碍代码逻辑的前提下充分实现错误处理; ·如何进行单元测试和测试驱动开发。

目 录
第1章 整洁代码 1
11 要有代码 2
12 糟糕的代码 2
13 混乱的代价 3
131 华丽新设计 4
132 态度 4
133 谜题 5
134 整洁代码的艺术 5
135 什么是整洁代码 6
14 思想流派 10
15 我们是作者 11
16 童子军军规 12
17 前传与原则 12
18 小结 13
19 文献 132章 有意义的命名 14
21 介绍 14
22 名副其实 15
23 避免误导 16
24 做有意义的区分 17
25 使用读得出来的名称 18
26 使用可搜索的名称 19
27 避免使用编码 20
271 匈牙利语标记法 20
272 成员前缀 21
273 接口和实现 21
28 避免思维映射 21
29 类名 22
210 方法名 22
211 别抖机灵 22
212 每个概念对应一个词 23
213 别用双关语 23
214 使用解决方案领域名称 24
215 使用源自所涉问题领域的名称 24
216 添加有意义的语境 24
217 不要添加没用的语境 26
218 最后的话 273章 函数 28
31 短小 31
32 只做一件事 32
33 每个函数一个抽象层级 33
34 switch语句 34
35 使用具有描述性的名称 35
36 函数参数 36
361 单参数函数的普遍形式 37
362 标识参数 37
363 双参数函数 38
364 三参数函数 38
365 参数对象 39
366 参数列表 39
367 动词与关键字 39
37 无副作用 40
38 分隔指令与询问 41
39 使用异常替代返回错误码 42
391 抽离try/catch代码块 42
392 错误处理就是一件事 43
393 Error.java依赖磁铁 43
310 别重复自己 44
311 结构化编程 44
312 如何写出这样的函数 45
313 小结 45
314 SetupTeardownIncluder程序 45
315 文献 484章 注释 49
41 注释不能美化糟糕的代码 50
42 用代码来阐述 51
43 好注释 51
431 法律信息 51
432 提供信息的注释 51
433 对意图的解释 52
434 阐释 53
435 警示 53
436 TODO注释 54
437 放大 55
438 公共API中的Javadoc 55
44 坏注释 55
441 喃喃自语 55
442 多余的注释 56
443 误导性注释 58
444 循规式注释 59
445 日志式注释 59
446 废话注释 60
447 可怕的废话 62
448 能用函数或变量时就别用注释 62
449 位置标记 62
4410 括号后面的注释 63
4411 归属与署名 63
4412 注释掉的代码 64
4413 HTML注释 64
4414 非本地信息 65
4415 信息过多 65
4416 不明显的联系 66
4417 函数头 66
4418 非公共代码中的Javadoc 66
4419 范例 66
45 文献 705章 格式 71
51 格式的目的 72
52 垂直格式 72
521 向报纸学习 73
522 概念间垂直方向上的区隔 73
523 垂直方向上的靠近 74
524 垂直距离 75
525 垂直顺序 79
53 横向格式 80
531 水平方向上的区隔与靠近 81
532 水平对齐 82
533 缩进 83
534 空范围 84
54 团队规则 85
55 “鲍勃大叔”的格式规则 856章 对象和数据结构 88
61 数据抽象 88
62 数据、对象的反对称性 90
63 得墨忒耳律 92
631 火车失事 92
632 混杂 93
633 隐藏结构 93
64 数据传送对象 94
65 小结 95
66 文献 967章 错误处理 97
71 使用异常而非返回码 98
72 先写try-catch-finally语句 99
73 使用未检异常 100
74 给出异常发生的环境说明 101
75 依调用者需要定义异常类 101
76 定义常规流程 103
77 别返回null值 104
78 别传递null值 105
79 小结 106
710 文献 1068章 边界 107
81 使用第三方代码 108
82 浏览和学习边界 109
83 学习log4j 110
84 学习性测试的好处不只是免费 112
85 使用尚不存在的代码 112
86 整洁的边界 113
87 文献 1149章 单元测试 115
91 TDD三定律 116
92 保持测试整洁 117
93 整洁的测试 118
931 面向特定领域的测试语言 120
932 双重标准 121
94 每个测试一个断言 123
95 F.I.R.S.T. 125
96 小结 125
97 文献 12610章 类 127
101 类的组织 128
102 类应该短小 128
1021 单一权责原则 130
1022 内聚 131
1023 保持内聚性就会得到许多短小的类 132
103 为了修改而组织 138
104 文献 14111章 系统 142
111 如何建造一个城市 143
112 将系统的构造与使用分开 143
1121 分解main 144
1122 工厂 145
1123 依赖注入 145
113 扩容 146
114 Java代理 149
115Java AOP框架 151
116 AspectJ的方面 154
117 测试驱动系统架构 154
118 优化决策 155
119 明智使用添加了可论证价值的标准 155
1110 系统需要领域特定语言 156
1111 小结 156
1112 文献 15612章 迭进 158
121 通过迭进设计达到整洁目的 158
122 简单设计规则1:运行所有测试 159
123 简单设计规则24:重构 159
124 不可重复 160
125 表达力 162
126 尽可能少的类和方法 163
127 小结 163
128 文献 16313章 并发编程 164
131 为什么要并发 165
132 挑战 166
133 并发防御原则 167
1331 单一权责原则 167
1332 推论:限制数据作用域 167
1333 推论:使用数据副本 168
1334 推论:线程应尽可能地独立 168
134 了解Java库 168
135 了解执行模型 169
1351 生产者-消费者模型 170
1352 读者-作者模型 170
1353 宴席哲学家 170
136 警惕同步方法之间的依赖 170
137 保持同步区域微小 171
138 很难编写正确的关闭代码 171
139 测试线程代码 172
1391 将伪失败看作可能的线程问题 172
1392 先使非线程代码可工作 172
1393 编写可插拔的线程代码 173
1394 编写可调整的线程代码 173
1395 运行多于处理器数量的线程 173
1396 在不同平台上运行 173
1397 装置试错代码 174
1398 硬编码 174
1399 自动化 175
1310 小结 176
1311 文献 17614章 逐步改进 177
141 Args的实现 178
142 Args:草稿 185
1421 所以我暂停了 196
1422 渐进 197
143 字符串类型参数 199
144 小结 23615章 JUnit内幕 237
151 JUnit框架 238
152 小结 25116章 重构SerialDate 252
161 首先,让它能工作 253
162 让它做对 255
163 小结 268
164 文献 26817章 味道与启发 269
171 注释 270
172 环境 271
173 函数 271
174 一般性问题 272
175 Java 288
176 名称 291
177 测试 295
178 小结 296
179 文献 296
附录A 并发编程II 297
附录B org.jfree.date.SerialDate 326
结束语 388