发布时间

读-代码整洁之道-笔记(有感)

作者

Chad

缘起

最近想读一本书,一本不是 code 工具书、又对编程有所提升的书籍。决定读一读收藏已久的《代码整洁之道》 -- Robert C. Martin。

看书笔记和观后感记于此。 📖

军规

童子军军规

我们接到一个需求或功能时,首先 review 代码可行性,而不是在以前的代码上堆积。

然而目前大多数公司遵循他们自以为是的"敏捷式开发",需求压力大,导致这一点很难落地实现(包括我自己)。个人觉得这就是社区开源项目的质量普遍比公司内部项目质量高的原因之一。

命名

  1. 避免映射思维 如 i和k 这种的变量很容易和 for 循环中的 k j i 混淆
  2. 有意义的命名

有义意的命名

  1. 类名

类名和对象应该是名词或者名词短语,如 Customer、WikiPage、Account 等。避免使用 Manager、Data、Info 这样的类名,类名不应是动词。

  1. 方法名

方法名

函数

函数糟糕代码

以上是一个示例代码片段,一个糟糕的示例

  • 重构之后

函数代码重构1

  • 你大概能明白重构之前的代码在做什么,但应该看不清细节。而下面的重构后的代码我们就可以一目了然,很容易了解其信息。

  • 我们不难发现良好的代码具备以下特点

    • 短小:函数的第一条规则就是要短小。函数每行不应该有 150 个字符那么长,函数也不应该有 100 行那么长,20 行最佳。

    • 代码块和缩进:诸如 if、switch、while 之类的语句,其中的代码块最好只有一行,该行是一个函数调用。函数的嵌套层级不应该多于一层或两层。

      JavaScript ES5 之前在这个方面就有非常糟糕的写法,也被大家所诟病 -- 充斥着大量的回调地狱、多层闭包等。

    • 只做一件事:我们在写一个函数的时候要遵循低耦合的特点,一个函数只做一件事,也就是单一职责。

    • switch 语句:写出短小的 switch 语句很难,哪怕只有两个条件的 switch,代码块也会大很多。switch 天生就要做多件事,不过我们可以保证每个 switch 都埋藏在较低的抽象层级,而且永不重复。

    • 使用描述性名称

    • 函数参数:最理想的函数参数是 0 参数,其次是 1 参数,再其次是 2 参数,尽量避免出现 3 参数(多参数)的情况。如果函数确实需要多个参数,可以考虑把参数封装成对象或类。

    • 结构化编程:每个函数、函数中的每个代码块都应该只有一个入口、一个出口,意味着每个函数中只能有一个 return 语句,循环中不能有 breakcontinue 语句。但是对于小函数,偶尔出现 returnbreakcontinue 语句没有坏处,所以我们要保持函数短小精悍。

  • 小结:

每个系统都是使用某种领域特定的语言来搭建的,而这种语言是程序员设计来描述那个系统的。


注释

  1. 用名称代替过于明了的注释
// Format matched kk:mm EEE, MM, dd, yyyy 

Pattern timeMatcger = PAatern.compile(

这类注释有时候会管用,但我们更推荐使用函数名称来传达信息,比如 responderBeingTested

  1. 对于意图的解释

  2. 阐述解释:有些地方过于抽象、描述起来太冗长,可以清楚地描述参数、返回值。

  3. 警示:用于警告其他程序员可能出现某种后果。

  4. TODO 注释:用待办的方式放在代码中,也有助于 IDE 定位。

  5. 归属/署名:有助于找到对应的人。

  6. 注释掉的代码:这是非常糟糕的做法,尽量避免。

Support

赞赏

如果这些内容对你有所帮助,欢迎赞赏支持。