整洁代码经典实例
Maximiliano Contieri
黄俊彬 译
出版时间:2024年10月
页数:464
“一本内容丰富、理论深刻,并且包含许多实用例子的书,帮助你编写整洁的代码。强烈推荐给所有追求高质量软件的人。”
——Daniel Moka
软件工匠,MokaIT
“Maxi是一位应用科学家,他在软件开发领域的深刻专业知识在这本书中得到了精彩展现。”
——Alex Bunardzic
软件开发者兼讲师

软件工程师和架构师在处理大型复杂代码库时,需要有效地扩展和维护它们。通过这本经典实例,本书作者不仅仅介绍了整洁代码的概念,还向你展示如何识别改进机会,并评估它们对生产代码的影响。这些技术在可靠性和系统演化方面,随着时间的推移带来了显著的回报。
本书通过JavaScript、PHP、Python、Java等多种编程语言的真实示例,提供了经过验证的实践方法,帮助你扩展和维护大型系统,每章涵盖了包括可读性、耦合性、可测试性、安全性和可扩展性在内的基本概念,还有代码坏味道及其相应的解决方案。
随着阅读的深入,本书中的重构实例及其解决的问题会变得越来越复杂。你将学习以下内容:
● 理解整洁代码的好处,并学习如何识别改进机会。
● 逐步学习重构技术。
● 理解整洁代码背后的理论。
● 在多种现代编程语言中看到实际的例子。
● 获得代码坏味道的全面列表,了解它们的影响及可能的解决方案。
● 编写简洁直观的代码,注重可读性和学习性。
  1. 第1章 整洁代码
  2. 1.1 什么是代码坏味道?
  3. 1.2 重构是什么?
  4. 1.3 什么是经典实例?
  5. 1.4 为什么要写整洁的代码?
  6. 1.5 可读性、性能,或者两者兼而有之
  7. 1.6 软件类型
  8. 1.7 机器生成的代码
  9. 1.8 本书中的命名考虑
  10. 1.9 设计模式
  11. 1.10 编程语言范式
  12. 1.11 对象与类的比较
  13. 1.12 可变性
  14. 第2章 建立原则
  15. 2.0 引言
  16. 2.1 为什么它是一个模型?
  17. 2.2 为什么它是抽象的?
  18. 2.3 为什么它是可编程的?
  19. 2.4 为什么它是部分的?
  20. 2.5 为什么它是解释性的?
  21. 2.6 为什么它与现实有关?
  22. 2.7 推断规则
  23. 2.8 唯一的软件设计原则
  24. 第3章 贫血模型
  25. 3.0 引言
  26. 3.1 将贫血对象转换为丰富对象
  27. 3.2 识别你的对象的本质
  28. 3.3 移除对象中的setter
  29. 3.4 移除贫血代码生成器
  30. 3.5 移除自动属性
  31. 3.6 移除DTO
  32. 3.7 完善空构造函数
  33. 3.8 移除getter
  34. 3.9 防止对象随意调用
  35. 3.10 移除动态属性
  36. 第4章 原始偏执
  37. 4.0 引言
  38. 4.1 创建小对象
  39. 4.2 实例化原始数据
  40. 4.3 实例化关联数组
  41. 4.4 移除滥用字符串
  42. 4.5 实例化时间戳
  43. 4.6 实例化子集为对象
  44. 4.7 实例化字符串验证
  45. 4.8 移除不必要的属性
  46. 4.9 创建日期区间
  47. 第5章 可变性
  48. 5.0 引言
  49. 5.1 将变量改为常量
  50. 5.2 声明变量为可变变量
  51. 5.3 禁止改变本质
  52. 5.4 避免可变的常量数组
  53. 5.5 移除延迟初始化
  54. 5.6 冻结可变常量
  55. 5.7 移除副作用
  56. 5.8 防止提升
  57. 第6章 声明式代码
  58. 6.0 引言
  59. 6.1 缩小重用变量的范围
  60. 6.2 移除空行
  61. 6.3 移除带版本的方法
  62. 6.4 移除双重否定
  63. 6.5 改变错位的责任
  64. 6.6 替换显式迭代
  65. 6.7 记录设计决策
  66. 6.8 用常量替换魔法数字
  67. 6.9 分离“是什么”和“怎么做”
  68. 6.10 文档化正则表达式
  69. 6.11 重写Yoda条件
  70. 6.12 移除滑稽方法
  71. 6.13 避免回调地狱
  72. 6.14 生成良好的错误消息
  73. 6.15 避免魔法修正
  74. 第7章 命名
  75. 7.0 引言
  76. 7.1 扩展缩写
  77. 7.2 重命名和拆分Helpers和Utils
  78. 7.3 重命名MyObjects
  79. 7.4 重命名结果变量
  80. 7.5 重命名以类型命名的变量
  81. 7.6 重命名长名称
  82. 7.7 重命名抽象名称
  83. 7.8 更正拼写错误
  84. 7.9 从属性中移除类名
  85. 7.10 移除类和接口的首字母
  86. 7.11 重命名base/do函数
  87. 7.12 将复数类转换为单数
  88. 7.13 从名称中移除“Collection”
  89. 7.14 移除类名中的“Impl”前缀/后缀
  90. 7.15 根据角色重命名参数
  91. 7.16 移除冗余的参数名称
  92. 7.17 移除名称中的不必要上下文
  93. 7.18 避免数据命名
  94. 第8章 注释
  95. 8.0 引言
  96. 8.1 删除被注释的代码
  97. 8.2 删除过时的注释
  98. 8.3 删除逻辑注释
  99. 8.4 删除Getter注释
  100. 8.5 将注释转换为函数名称
  101. 8.6 删除方法内的注释
  102. 8.7 用测试替换注释
  103. 第9章 标准
  104. 9.0 引言
  105. 9.1 遵循代码规范
  106. 9.2 统一缩进方式
  107. 9.3 统一命名规范
  108. 9.4 用英文编写代码
  109. 9.5 统一参数顺序
  110. 9.6 修复另外的问题
  111. 第10章 复杂性
  112. 10.0 引言
  113. 10.1 移除重复代码
  114. 10.2 移除设置/配置和功能切换
  115. 10.3 将状态作为属性更改
  116. 10.4 移除代码中的特殊设计
  117. 10.5 打破多个Promises
  118. 10.6 打破长链的协作
  119. 10.7 将方法提取到对象中
  120. 10.8 关注数组构造函数
  121. 10.9 移除幽灵对象
  122. 第11章 膨胀者
  123. 11.0 引言
  124. 11.1 分解过长的方法
  125. 11.2 减少过多参数
  126. 11.3 减少多余变量
  127. 11.4 移除过多的括号
  128. 11.5 移除过多的方法
  129. 11.6 分解过多的属性
  130. 11.7 减少导入列表
  131. 11.8 拆分“与”功能
  132. 11.9 拆分臃肿的接口
  133. 第12章 YAGNI
  134. 12.0 引言
  135. 12.1 移除死代码
  136. 12.2 使用代码代替图表
  137. 12.3 重构只有一个子类的类
  138. 12.4 移除只使用一次的接口
  139. 12.5 移除设计模式的滥用
  140. 12.6 替换业务集合
  141. 第13章 快速失败
  142. 13.0 引言
  143. 13.1 变量重新赋值的重构
  144. 13.2 强制前提条件
  145. 13.3 使用更严格的参数
  146. 13.4 移除开关语句中的默认情况
  147. 13.5 避免在遍历时修改集合
  148. 13.6 重新定义哈希和相等性
  149. 13.7 无功能性变化的重构
  150. 第14章 条件语句
  151. 14.0 引言
  152. 14.1 用多态替换偶然的if语句
  153. 14.2 为事件重命名标志变量
  154. 14.3 实例化布尔变量
  155. 14.4 替换Switch/Case/elseif语句
  156. 14.5 使用集合替换硬编码的if条件
  157. 14.6 将布尔值改为短路条件
  158. 14.7 添加隐式else
  159. 14.8 重写条件箭头代码
  160. 14.9 避免使用短路技巧
  161. 14.10 重写嵌套的箭头代码
  162. 14.11 避免返回布尔值进行条件检查
  163. 14.12 更改布尔值的比较方式
  164. 14.13 从长三元表达式中提取
  165. 14.14 将非多态函数转换为多态函数
  166. 14.15 改变相等比较
  167. 14.16 使硬编码的业务条件具体化
  168. 14.17 移除不必要的布尔值
  169. 14.18 重写嵌套三元条件
  170. 第15章 空值
  171. 15.0 简介
  172. 15.1 创建空对象
  173. 15.2 移除可选链路
  174. 15.3 将可选属性转换为集合
  175. 15.4 使用真实对象作为空对象
  176. 15.5 不使用空对象表示未知位置
  177. 第16章 过早优化
  178. 16.0 引言
  179. 16.1 避免对象上的标识符
  180. 16.2 移除过早的优化
  181. 16.3 移除位运算的过早优化
  182. 16.4 减少过度泛化
  183. 16.5 改变结构优化
  184. 16.6 移除锚定船只
  185. 16.7 从领域对象中提取缓存
  186. 16.8 基于实现的回调事件的移除
  187. 16.9 移除构造函数中的查询
  188. 16.10 从析构函数中移除代码
  189. 第17章 耦合
  190. 17.0 引言
  191. 17.1 显式化隐藏假设
  192. 17.2 替换单例模式
  193. 17.3 打破上帝对象
  194. 17.4 打破分歧性变更
  195. 17.5 将9999特殊标志值转换为正常值
  196. 17.6 移除散弹代码
  197. 17.7 移除可选参数
  198. 17.8 防止特性依恋
  199. 17.9 移除中间人
  200. 17.10 将默认参数移到末尾
  201. 17.11 避免连锁反应
  202. 17.12 移除业务对象上的意外方法
  203. 17.13 从用户界面中移除业务代码
  204. 17.14 改变类之间的耦合
  205. 17.15 重构数据团
  206. 17.16 打破不恰当的亲密关系
  207. 17.17 转换可互换对象
  208. 第18章 全局变量
  209. 18.0 引言
  210. 18.1 实例化全局函数
  211. 18.2 实例化静态函数
  212. 18.3 用结构化代码替换GoTo
  213. 18.4 移除全局类
  214. 18.5 改变全局日期创建
  215. 第19章 层次结构
  216. 19.0 引言
  217. 19.1 打破深层继承
  218. 19.2 打破悠悠球层次结构
  219. 19.3 打破子分类以重用代码
  220. 19.4 用行为替换“is-a”关系
  221. 19.5 移除嵌套类
  222. 19.6 重命名孤立类
  223. 19.7 使具体类成为最终类
  224. 19.8 显式定义类的继承关系
  225. 19.9 迁移空类
  226. 19.10 推迟过早的分类
  227. 19.11 移除受保护的属性
  228. 19.12 完成空实现
  229. 第20章 测试
  230. 20.0 引言
  231. 20.1 测试私有方法
  232. 20.2 为断言添加描述
  233. 20.3 将assertTrue迁移到特定断言
  234. 20.4 用真实对象替换模拟对象
  235. 20.5 优化通用断言
  236. 20.6 移除不稳定的测试
  237. 20.7 更改浮点数断言
  238. 20.8 将测试数据改为真实数据
  239. 20.9 保护违反封装的测试
  240. 20.10 移除不相关的测试信息
  241. 20.11 在每个合并请求中添加覆盖率
  242. 20.12 根据日期重写测试
  243. 20.13 学习一种新的编程语言
  244. 第21章 技术债务
  245. 21.0 引言
  246. 21.1 移除依赖于生产环境的代码
  247. 21.2 移除缺陷跟踪器
  248. 21.3 移除警告/严格模式关闭
  249. 21.4 预防和移除ToDo和FixMe
  250. 第22章 异常
  251. 22.0 引言
  252. 22.1 删除空的异常块
  253. 22.2 删除不必要的异常
  254. 22.3 重写预期情况下的异常
  255. 22.4 重写嵌套的try/catch块
  256. 22.5 用异常替换返回代码
  257. 22.6 重写异常箭头代码
  258. 22.7 隐藏终端用户的低级错误
  259. 22.8 缩小异常范围
  260. 第23章 元编程
  261. 23.0 简介
  262. 23.1 移除元编程用法
  263. 23.2 实例化匿名函数
  264. 23.3 移除预处理器
  265. 23.4 移除动态方法
  266. 第24章 类型
  267. 24.0 引言
  268. 24.1 移除类型检查
  269. 24.2 处理真值
  270. 24.3 将浮点数改为小数
  271. 第25章 安全性
  272. 25.0 引言
  273. 25.1 输入过滤
  274. 25.2 更改顺序ID
  275. 25.3 移除包依赖
  276. 25.4 替换恶意正则表达式
  277. 25.5 保护对象反序列化
  278. 术语表
书名:整洁代码经典实例
译者:黄俊彬 译
国内出版社:中国电力出版社
出版时间:2024年10月
页数:464
书号:978-7-5198-9240-1
原版书书名:Clean Code Cookbook
原版书出版商:O'Reilly Media
Maximiliano Contieri
 
Maximiliano Contieri在软件行业工作了25年,同时在布宜诺斯艾利斯大学教授计算机科学。他还在流行的博客平台和会议上发表了关于整洁代码、重构和代码坏味道的文章。他提倡利用软件基础原理构建优雅而健壮的解决方案,倡导声明式和行为式编码风格。
 
 
封面上的动物是一只灰海豹(学名:Halichoerus grypus),它们也亲切地被称为“马头”和“海中的钩鼻猪”,因为它们有独特的大鼻子。
灰海豹的体重在550~880磅之间,体长可达7.5~10英尺。当它们在陆地上时,会使用它们短小的鳍状肢,像毛毛虫一样移动。它们可以活到35岁,并且能够潜到超过1000英尺深的水下,持续长达一个小时。
灰海豹因其敏锐的视力和听力而成为出色的猎手。它们经常成群狩猎,以各种鱼类、甲壳类、鱿鱼、章鱼和偶尔的海鸟为食。灰海豹每天可以吃掉相当于它们体重4%~6%的食物。
世界上有三种灰海豹种群:一种在北大西洋(加拿大东部和美国东北部),一种在东北大西洋(大不列颠、冰岛、挪威、丹麦、法罗群岛、俄罗斯),还有一种在波罗的海。它们栖息在岩石海岸、岛屿、沙洲、冰架和冰山。
灰海豹种群面临着几项威胁。它们可能会被渔网缠住,遭受骚扰、化学污染、石油泄漏、船只和车辆碰撞以及非法狩猎。在美国,它们是受保护的海洋哺乳动物,但一些国家允许合法猎杀,以控制种群数量并减少海豹对商业重要鱼类资源的影响。尽管存在这些问题,灰海豹的数量众多,它们被认为是濒危物种名单上最不令人担忧的物种。奥莱利封面上的许多动物都是濒危的;它们对世界都很重要。
购买选项
定价:148.00元
书号:978-7-5198-9240-1
出版社:中国电力出版社