当前位置:当前位置:主页 > 计算机电子书 > 其它 > 代码整洁 pdf电子书
代码整洁之道(2020)

代码整洁之道(2020) PDF 清晰版

  • 更新:2021-03-19
  • 大小:149 MB
  • 类别:代码整洁
  • 作者:罗伯特·C.、马丁
  • 出版:人民邮电出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

代码整洁之道(2020)》是由人民邮电出版社出版的一本关于代码整洁方面的书籍,作者是罗伯特·C.、马丁,主要介绍了关于代码整洁、代码方面的知识内容,目前在代码整洁类书籍综合评分为:9.9分。

书籍介绍

软件质量,不但依赖架构及项目管理,而且与代码质量紧密相关。这一点,无论是敏捷开发流派还是传统开发流派,都不得不承认。 本书提出一种观点:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。作为编程领域的佼佼者,本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称“启示”),并辅以来自实际项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。 本书阅读对象为一切有志于改善代码质量的程序员及技术经理。书中介绍的规则均来自作者多年的实践经验,涵盖从命名到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。

推荐理由

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

目录

  • 第1章 整洁代码 1
  • 1.1 要有代码 2
  • 1.2 糟糕的代码 2
  • 1.3 混乱的代价 3
  • 1.3.1 华丽新设计 4
  • 1.3.2 态度 4
  • 1.3.3 谜题 5
  • 1.3.4 整洁代码的艺术 5
  • 1.3.5 什么是整洁代码 6
  • 1.4 思想流派 10
  • 1.5 我们是作者 11
  • 1.6 童子军军规 12
  • 1.7 前传与原则 12
  • 1.8 小结 13
  • 1.9 文献 13
  • 第2章 有意义的命名 14
  • 2.1 介绍 14
  • 2.2 名副其实 15
  • 2.3 避免误导 16
  • 2.4 做有意义的区分 17
  • 2.5 使用读得出来的名称 18
  • 2.6 使用可搜索的名称 19
  • 2.7 避免使用编码 20
  • 2.7.1 匈牙利语标记法 20
  • 2.7.2 成员前缀 21
  • 2.7.3 接口和实现 21
  • 2.8 避免思维映射 21
  • 2.9 类名 22
  • 2.10 方法名 22
  • 2.11 别抖机灵 22
  • 2.12 每个概念对应一个词 23
  • 2.13 别用双关语 23
  • 2.14 使用解决方案领域名称 24
  • 2.15 使用源自所涉问题领域的名称 24
  • 2.16 添加有意义的语境 24
  • 2.17 不要添加没用的语境 26
  • 2.18 最后的话 27
  • 第3章 函数 28
  • 3.1 短小 31
  • 3.2 只做一件事 32
  • 3.3 每个函数一个抽象层级 33
  • 3.4 switch语句 34
  • 3.5 使用具有描述性的名称 35
  • 3.6 函数参数 36
  • 3.6.1 单参数函数的普遍形式 37
  • 3.6.2 标识参数 37
  • 3.6.3 双参数函数 38
  • 3.6.4 三参数函数 38
  • 3.6.5 参数对象 39
  • 3.6.6 参数列表 39
  • 3.6.7 动词与关键字 39
  • 3.7 无副作用 40
  • 3.8 分隔指令与询问 41
  • 3.9 使用异常替代返回错误码 42
  • 3.9.1 抽离try/catch代码块 42
  • 3.9.2 错误处理就是一件事 43
  • 3.9.3 Error.java依赖磁铁 43
  • 3.10 别重复自己 44
  • 3.11 结构化编程 44
  • 3.12 如何写出这样的函数 45
  • 3.13 小结 45
  • 3.14 SetupTeardownIncluder程序 45
  • 3.15 文献 48
  • 第4章 注释 49
  • 4.1 注释不能美化糟糕的代码 50
  • 4.2 用代码来阐述 51
  • 4.3 好注释 51
  • 4.3.1 法律信息 51
  • 4.3.2 提供信息的注释 51
  • 4.3.3 对意图的解释 52
  • 4.3.4 阐释 53
  • 4.3.5 警示 53
  • 4.3.6 TODO注释 54
  • 4.3.7 放大 55
  • 4.3.8 公共API中的Javadoc 55
  • 4.4 坏注释 55
  • 4.4.1 喃喃自语 55
  • 4.4.2 多余的注释 56
  • 4.4.3 误导性注释 58
  • 4.4.4 循规式注释 59
  • 4.4.5 日志式注释 59
  • 4.4.6 废话注释 60
  • 4.4.7 可怕的废话 62
  • 4.4.8 能用函数或变量时就别用注释 62
  • 4.4.9 位置标记 62
  • 4.4.10 括号后面的注释 63
  • 4.4.11 归属与署名 63
  • 4.4.12 注释掉的代码 64
  • 4.4.13 HTML注释 64
  • 4.4.14 非本地信息 65
  • 4.4.15 信息过多 65
  • 4.4.16 不明显的联系 66
  • 4.4.17 函数头 66
  • 4.4.18 非公共代码中的Javadoc 66
  • 4.4.19 范例 66
  • 4.5 文献 70
  • 第5章 格式 71
  • 5.1 格式的目的 72
  • 5.2 垂直格式 72
  • 5.2.1 向报纸学习 73
  • 5.2.2 概念间垂直方向上的区隔 73
  • 5.2.3 垂直方向上的靠近 74
  • 5.2.4 垂直距离 75
  • 5.2.5 垂直顺序 79
  • 5.3 横向格式 80
  • 5.3.1 水平方向上的区隔与靠近 81
  • 5.3.2 水平对齐 82
  • 5.3.3 缩进 83
  • 5.3.4 空范围 84
  • 5.4 团队规则 85
  • 5.5 “鲍勃大叔”的格式规则 85
  • 第6章 对象和数据结构 88
  • 6.1 数据抽象 88
  • 6.2 数据、对象的反对称性 90
  • 6.3 得墨忒耳律 92
  • 6.3.1 火车失事 92
  • 6.3.2 混杂 93
  • 6.3.3 隐藏结构 93
  • 6.4 数据传送对象 94
  • 6.5 小结 95
  • 6.6 文献 96
  • 第7章 错误处理 97
  • 7.1 使用异常而非返回码 98
  • 7.2 先写try-catch-finally语句 99
  • 7.3 使用未检异常 100
  • 7.4 给出异常发生的环境说明 101
  • 7.5 依调用者需要定义异常类 101
  • 7.6 定义常规流程 103
  • 7.7 别返回null值 104
  • 7.8 别传递null值 105
  • 7.9 小结 106
  • 7.10 文献 106
  • 第8章 边界 107
  • 8.1 使用第三方代码 108
  • 8.2 浏览和学习边界 109
  • 8.3 学习log4j 110
  • 8.4 学习性测试的好处不只是免费 112
  • 8.5 使用尚不存在的代码 112
  • 8.6 整洁的边界 113
  • 8.7 文献 114
  • 第9章 单元测试 115
  • 9.1 TDD三定律 116
  • 9.2 保持测试整洁 117
  • 9.3 整洁的测试 118
  • 9.3.1 面向特定领域的测试语言 120
  • 9.3.2 双重标准 121
  • 9.4 每个测试一个断言 123
  • 9.5 F.I.R.S.T. 125
  • 9.6 小结 125
  • 9.7 文献 126
  • 第10章 类 127
  • 10.1 类的组织 128
  • 10.2 类应该短小 128
  • 10.2.1 单一权责原则 130
  • 10.2.2 内聚 131
  • 10.2.3 保持内聚性就会得到许多短小的类 132
  • 10.3 为了修改而组织 138
  • 10.4 文献 141
  • 第11章 系统 142
  • 11.1 如何建造一个城市 143
  • 11.2 将系统的构造与使用分开 143
  • 11.2.1 分解main 144
  • 11.2.2 工厂 145
  • 11.2.3 依赖注入 145
  • 11.3 扩容 146
  • 11.4 Java代理 149
  • 11.5 纯Java AOP框架 151
  • 11.6 AspectJ的方面 154
  • 11.7 测试驱动系统架构 154
  • 11.8 优化决策 155
  • 11.9 明智使用添加了可论证价值的标准 155
  • 11.10 系统需要领域特定语言 156
  • 11.11 小结 156
  • 11.12 文献 156
  • 第12章 迭进 158
  • 12.1 通过迭进设计达到整洁目的 158
  • 12.2 简单设计规则1:运行所有测试 159
  • 12.3 简单设计规则2~4:重构 159
  • 12.4 不可重复 160
  • 12.5 表达力 162
  • 12.6 尽可能少的类和方法 163
  • 12.7 小结 163
  • 12.8 文献 163
  • 第13章 并发编程 164
  • 13.1 为什么要并发 165
  • 13.2 挑战 166
  • 13.3 并发防御原则 167
  • 13.3.1 单一权责原则 167
  • 13.3.2 推论:限制数据作用域 167
  • 13.3.3 推论:使用数据副本 168
  • 13.3.4 推论:线程应尽可能地独立 168
  • 13.4 了解Java库 168
  • 13.5 了解执行模型 169
  • 13.5.1 生产者-消费者模型 170
  • 13.5.2 读者-作者模型 170
  • 13.5.3 宴席哲学家 170
  • 13.6 警惕同步方法之间的依赖 170
  • 13.7 保持同步区域微小 171
  • 13.8 很难编写正确的关闭代码 171
  • 13.9 测试线程代码 172
  • 13.9.1 将伪失败看作可能的线程问题 172
  • 13.9.2 先使非线程代码可工作 172
  • 13.9.3 编写可插拔的线程代码 173
  • 13.9.4 编写可调整的线程代码 173
  • 13.9.5 运行多于处理器数量的线程 173
  • 13.9.6 在不同平台上运行 173
  • 13.9.7 装置试错代码 174
  • 13.9.8 硬编码 174
  • 13.9.9 自动化 175
  • 13.10 小结 176
  • 13.11 文献 176
  • 第14章 逐步改进 177
  • 14.1 Args的实现 178
  • 14.2 Args:草稿 185
  • 14.2.1 所以我暂停了 196
  • 14.2.2 渐进 197
  • 14.3 字符串类型参数 199
  • 14.4 小结 236
  • 第15章 JUnit内幕 237
  • 15.1 JUnit框架 238
  • 15.2 小结 251
  • 第16章 重构SerialDate 252
  • 16.1 首先,让它能工作 253
  • 16.2 让它做对 255
  • 16.3 小结 268
  • 16.4 文献 268
  • 第17章 味道与启发 269
  • 17.1 注释 270
  • 17.2 环境 271
  • 17.3 函数 271
  • 17.4 一般性问题 272
  • 17.5 Java 288
  • 17.6 名称 291
  • 17.7 测试 295
  • 17.8 小结 296
  • 17.9 文献 296
  • 附录A 并发编程II 297
  • 附录B org.jfree.date.SerialDate 326
  • 结束语 388

资源获取

网友留言