代码整洁之道

整洁代码的度量——可读性、可修改性。

习艺之要有二:,而本书则分为两个部分:原则与模式、案例研究。

圣人,生而知之;中人,唯有通过知得与识得,才能掌握知识。只掌握书中的原则与模式是远远不够的,我们还须阅读他人的代码以发现自身的不足,并在代码中躬行“整洁”。

整洁是相对的,“深合己意”的代码就是整洁代码。“让营地比你来时更干净”,一以贯之,就是身美

程序设计是为了解决问题,代码则要体现设计意图。代码有三种状态:读、写、执行,从程序员的角度看,读、写是过程,执行是目的。代码的整洁度可以用可读性与可修改性来度量,读代码所花费的时间远多过于写代码所花费的时间,可读性是可修改性的前提。测试也是代码的一部分,整洁的测试能够降低代码的维护成本。

文摘

学写整洁代码很难,它可不止于要求你掌握原则和模式……

  • 你须自行实践,且体验自己的失败;

  • 你须观察他人的实践与失败;

  • 你须看看别人是怎样蹒跚学步,再转头研究他们的路数;

  • 你须看看别人是如何绞尽脑汁做出决策,又是如何为错误决策付出代价。

如果每个例程都让你感到深合己意,那就是整洁代码。如果代码让编程语言看起来像是专为解决那个问题而存在,就可以称之为漂亮的代码。

—Ward Cunningham

函数要短小,应该只做一件事,函数中的语句都要在同一抽象层级上。函数要么做什么事,要么回答什么事,但二者不可得兼。

每个系统都是使用某种领域特定语言搭建,而这种语言是程序员设计来描述那个系统的。函数是语言的动词,类是名词。这并非是退回到那种认为需求文档中的名词和动词就是系统中类和函数的最初设想的可怕的旧观念。大师级程序员把系统当作故事来讲,而不是当作程序来写。

注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。

如果说空白行隔开了概念,靠近的代码行则暗示了它们之间的紧密关系。除非有很好的理由,否则就不要把关系密切的概念放到不同的文件中。

将变量设置为私有(private)有一个理由:我们不想其他人依赖这些变量。类并不简单地用取值器和赋值器将其变量推向外间,而是曝露抽象接口,以便用户无需了解数据的实现就能操作数据本体。

过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改动既有函数的前提下添加新类。

如果将错误处理隔离看待,独立于主要逻辑之外,就能写出强固而整洁的代码。

测试代码和生产代码一样重要,它需要被思考、被设计和被照料,它该像生产代码一般保持整洁。

类应该只有少量实体变量,类中的每个方法都应该操作一个或多个这种变量。如果一个类中的每个变量都被每个方法所使用,则该类具有最大的内聚性。内聚性高,意味着类中的方法和变量互相依赖、互相结合成一个逻辑整体。当类丧失了内聚性,就拆分它!

软件系统应将启始过程和启始过程之后的运行时逻辑分离开,确保拥有解决主要依赖问题的全局性一贯策略。最佳的系统架构由模块化的关注面领域组成,不同的领域之间用最不具有侵害性的方面或类方面工具整合起来。