1 整洁代码
本书的内容概括:不要重复代码,只做一件事,表达力,小规模抽象。
稍后等于永不:Later equals never
简单代码依其重要性:
- 能通过所有测试
- 没有代码重复
- 体现系统的全部设计理念
- 包括尽量少的实体,如函数、类等
文档里的@author字段:我们是作者。作者都有读者。并且,只有程序员才会读你的代码。不读周边代码的话没法写代码,编写代码的难度,取决于读周边代码的难度。要想轻松写代码,干得快,早点做完,先让代码易读吧。Info和Data就像a、an、the一样,都是意义含混的废话。可搜索的名称;名称长短应与其作用域大小相对应。明确是王道。
糟糕的代码可以清理,但成本高昂,找到和破除陈旧的依赖关系费时费力。而保持代码整洁相对容易,5分钟前制造的混乱,能很容易地清理掉,解决之道就是保持代码持续整洁和简单。
函数的第一规则是要短小,第二规则是要更短小。代码块、缩进层级不应该多于一层或两层。块内调用的函数有较具说明性的名称,易于阅读和理解。只做一件事。每个小函数只该有一个return语句,循环中不能有break或continue语句,而且永远不能有任何goto语句。
写代码类似于写文章,想到什么写什么,再斟酌推敲打磨至心目中的样子。写函数一开始冗长而复杂,缩进嵌套循环太多,参数列表太长,名称太随意,也有重复代码;有初稿后进行打磨,分解函数、修改名称、消除重复、拆散类,同时保持测试通过。
注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。能用函数或变量时就别用注释。
垂直格式:代码组以空白行区隔,概念相关的代码则放到一起;横向格式:尽量保持代码行短小。
空格字符:加强分隔效果,能强调其前面的运算符。还有个微妙的用法,区分运算符优先级;可惜多数代码格式化工具都会漠视这点,从头到尾采用同样的空格方式。
2 测试驱动开发
对于第三方代码库,学习和整合都很难。通过编写学习性测试来遍览和理解第三方代码。好处不光是免费,还在投资上有正面的回报,比如当第三方程序包发布新版本,可以运行学习性测试看程序包是否有所改变。边界上的代码需要清晰的分割,和定义了期望的测试,避免在自己代码中过多了解第三方代码中的特定信息。
有了测试,就能保持代码和类的整洁,方法就是递增式地重构代码。测试覆盖率越高,就越不担心,能毫无顾虑地改进架构和设计。测试消除了对清理代码可能破坏代码的恐惧。整洁的测试必须有可读性,每个测试一个断言,只测试一个概念。
FIRST: Fast/Independent/Repeatable/Self-Validating/Timely
简单设计的四大原则:
- 运行所有测试
- 消除重复
- 表达力
- 尽可能少的类和方法
网友评论