Skip to content
MisakaTang's Blog
Go back

《编写可读代码的艺术》笔记

Edit page

代码的写法应当使别人理解它所需的时间最小化。

第一部分 表面层次的改进

第二章 把信息装到名字里

本章唯一的主题是:把信息塞入名字中。这句话的含意是,读者仅通过读到名字就可以获取大量信息。

下面是讨论过的几个小提示:

第三章 不会误解的名字

不会误解的名字是最好的名字—阅读你代码的人应该理解你的本意,并且不会有其他的理解。遗憾的是,很多英语单词在用来编程时是多义性的,例如filter、length和limit。

在你决定使用一个名字以前,要吹毛求疵一点,来想象一下你的名字会被误解成什么。最好的名字是不会误解的。

当要定义一个值的上限或下限使,max_和min_是很好的前缀。对于包含的范围,first和last是好的选择。对于包含/排除范围,begin和end是最好的选择,因为它们最常用。

当为布尔值命名时,使用is和has这样的词来明确表示它是个布尔值,避免使用反义的词。

要小心用户对特定词的期望。例如,用户会期望get()或者size()是轻量的方法。

第四章 审美

大家都愿意读有美感的代码。通过把代码用一致的、有意义的方法“格式化”,可以把代码变得更容易读,并且可以读得更快。

下面是讨论过的一些具体技巧:

第五章 该写什么样的注释

注释的目的是尽量帮助读者了解得和作者一样多。

注释的目的是帮助读者了解作者在写代码时已经知道的那些事情。本章介绍了如何发现所有的并不那么明显的信息块并且把它们写下来。

什么地方不需要注释:

你应该记录下来的想法包括:

站在读者的立场上思考:

第六章 写出言简意赅的注释

注释应当有很高的信息/空间率。

本章是关于如何把更多的信息装入更小的空间里。下面是一些具体的提示:

第二部分 简化循环和逻辑

第七章 把控制流变得易读

有几种方法可以让代码的控制流更易读。

在写一个比较时,把改变的值写在左边并且把更稳定的值写在右边更好一些。

你也可以重新排列if/else语句中的语句块。通常来讲,先处理正确的/简单的/有趣的情况。有时这些准则会冲突,但是当不冲突时,这是要遵循的经验法则。

某些编程结构,像三目运算符、do/while循环,以及goto经常会导致代码的可读性变差。最好不要使用它们,因为总是有更整洁的代替方式。

嵌套的代码块需要更加集中精力去理解。每层新的嵌套都需要读者把更多的上下文“压入栈”。应该把它们改写成更加“线性”的代码来避免深嵌套。

通常来讲提早返回可以减少嵌套并让代码整洁。“保护语句”尤其有用。

第八章 拆分超长的表达式

把你的超长表达式拆分成更容易理解的小块。

很难思考巨大的表达式。本章给出了几种拆分表达式的方法,以便读者可以一段一段地消化。

一个简单的技术是引入“解释变量”来代表较长的子表达式。这种方法有三个好处:

另一个技术是用德摩根定理来操作逻辑表达式—这个技术有时可以把布尔表达式用更整洁的方式重写。

最后,尽管本章是关于拆分独立的表达式的,同样,这些技术也常应用于大的代码块。所以,你可以在任何见到复杂逻辑的地方大胆地去拆分它们。

第九章 变量与可读性

让你的变量对尽量少的代码行可见。

本章是关于程序中的变量是如何快速积累而变得难以跟踪的。你可以通过减少变量的数量和让它们尽量“轻量级”来让代码更有可读性。具体有:

第三部分 重新组织代码

第十章 抽取不相关的子问题

对本章一个简单的总结就是“把一般代码和项目专有的代码分开”。其结果是,大部分代码都是一般代码。通过建立一大组库和辅助函数来解决一般问题,剩下的只是让你的程序与众不同的核心部分。

这个技巧有帮助的原因是它使程序员关注小而定义良好的问题,这些问题已经同项目的其他部分脱离。其结果是,对于这些子问题的解决方案倾向于更加完整和正确。你也可以在以后重用它们。

第十一章 一次只做一件事

应该把代码组织得一次只做一件事情。

本章给出了一个组织代码的简单技巧:一次只做一件事情。

如果你有很难读的代码,尝试把它所做的所有任务列出来。其中一些任务可以很容易地变成单独的函数(或类)。其他的可以简单地成为一个函数中的逻辑“段落”。具体如何拆分这些任务没有它们已经分开这个事实那样重要。难的是要准确地描述你的程序所做地所有这些小事情。

第十二章 把想法变成代码

本章讨论了一个简单的技巧,用自然语言描述程序然后用这个描述来帮助你写出更自然的代码。这个技巧出人意料地简单,但很强大。看到你在描述中所用的词和短语还可以帮助你发现哪些子问题可以拆分出来。

但是这个“用自然语言说事情”的过程不仅可以用于写代码。这个技巧叫做“橡皮鸭技术”。

另一个看待这个问题的角度是:如果你不能把问题说明白或者用词语来做设计,估计是缺少了什么东西或者什么东西缺少定义。把一个问题(或想法)变成语言真的可以让它更具体。

第十三章 少写代码

最好读的代码就是没有代码。

本章是关于写越少代码越好的。每行新的代码都需要测试、写文档和维护。另外,代码库中的代码越多,它就越重,而且在其上开发就越难。

你可以通过以下方法避免编写新代码:

第四部分 精选话题

第十四章 测试与可读性

在测试代码中,可读性仍然很重要。如果测试的可读性很好,其结果是它们也会变得很容易写,因此大家会写更多的测试。并且,如果你把事实代码设计得容易测试,代码整个设计会变得更好。

以下是如何改进测试的几个具体要点:

最重要的是,要使它易于改动和增加新的测试。


Edit page
Share this post on:

Previous Post
《心流》《黑客与画家》《禅与摩托车维修艺术》阅后杂谈
Next Post
《敏捷软件开发:原则、模式和实践》笔记