Tue, 07 Jul 2015 13:45:37 +0000

[美]Robert C. Martin 《代码整洁之道》 阅读笔记

你是个程序员,你想成为更好的程序员。

整洁代码

整洁代码就像绘画一样。整洁的代码如同优美的散文。干净利落的抽象。

简单代码的规则

  • 能通过所有测试
  • 没有重复代码
  • 体现系统中的全部设计理念
  • 包括尽量少的实体,比如类、方法、函数等。

消除重复和提高表达力。

有意义的命名

做有意义的区分,废话都是冗余,使用读得出来的名称, 使用可搜索的名称,避免使用编码,避免思维映射,类名,方法名,别扮可爱,每个概念对应一个词,别用双关语,使用解决方案领域名称,使用源自所涉问题领域的名称,添加有意义的语境,不要添加没用的语境。

目的:提高代码可读性。

函数

短小、只做一件事、每个函数一个抽象层级、switch 语句、使用描述性的名称、函数参数、无副作用、分隔指令与询问、使用异常替代返回错误码、别重复自己、结构化编程。

注释

  • 不能美化糟糕的代码
  • 用代码来阐述
  • 阐述
  • 坏注释:喃喃自语、多余、误导性、循规式、日志式、废话、可怕、能用函数或变量就不该用注释、位置标记、括号后面的、归属与署名、注释掉的代码、HTML 注释、非本地信息、信息过多、不明显的联系、函数头、非公共代码中的 Javadoc、范例

格式

保持良好的代码格式,选用一套简单规则并贯彻之。

  • 垂直格式
  • 团队规则
  • 格式规则

对象和数据结构

  • 数据抽象
  • 数据、对象的反对称性
  • 德墨忒尔率
  • 数据传送对象

错误处理

  • 使用异常而非返回码
  • 先写 Try-Catch-Finally 语句
  • 使用不可控异常
  • 给出异常发生的环境说明
  • 依调用者需要定义异常类
  • 定义常规流程
  • 别返回 null 值
  • 别传递 null 值

边界

  • 使用第三方代码
  • 浏览和学习边界
  • 学习性测试的好处不只是免费
  • 使用尚不存在的代码
  • 整洁的边界

单元测试

测试驱动,单元测试。

  • TDD
  • 保持整洁
  • 整洁的测试
  • 每个测试一个断言
  • F.I.R.S.T

  • 类的组织
  • 短小
  • 为了修改而组织

系统

  • 将系统与构造使用分开
  • 扩容
  • 代理
  • 框架
  • 测试驱动系统架构
  • 优化决策
  • 明智使用添加了可论证价值的标准
  • 系统需要领域特定语言

迭进

  • 通过迭进设计达到整洁的目的
  • 运行所有测试
  • 重构
  • 不可重复
  • 表达力
  • 尽可能少的类和方法

并发编程

挑战、防御原则、执行模型、警惕同步方法之间的依赖、保持同步区域微小、很难编写正确的关闭代码、测试线程代码。

逐步改进

JUnit 内幕

  • 框架

重构 SerialDate

  • 首先,让它能工作
  • 让它做对

味道与启发

注释、环境、函数、名称、测试。



blog comments powered by Disqus