编写可读代码的 10 个实践

2025-05-24

编写可读代码的 10 个实践

我写代码已经20年了。在此期间,我曾与17个团队合作,使用不同的语言开发了数百个项目。这些项目包罗万象,从简单的博客网站,到支持每秒3000次请求的API ,再到畅销的应用程序

通过这些经历,结合我读过的书籍,我发现代码中最重要的是什么:可读性

表面上看,可读性似乎很主观。它可能会因语言、代码库和团队的不同而有所差异。但深入探究,你会发现所有代码中都有一些核心元素使其具有可读性。

很多程序员离电脑太近了。只要代码能运行,其他一切都无关紧要。虽然这很常见,但它却将我们工作中所有的人为因素都排除在外。

在过去的几个月里,我致力于将这些元素提炼成 10 条代码编写实践,重点是提高代码可读性并降低复杂性。我已经详细地阐述了这些实践,并将它们应用到BaseCode中的实际代码片段中

不幸的是,很多人会觉得这些太琐碎、太基础了,所以不予采纳。但我向你保证,我遇到的每一段糟糕的代码都没有运用这些实践。而每一段好的代码,你都能找到其中一种,甚至多种实践。


格式化

格式化浪费了太多精力。制表符 vs. 空格。Allman vs. K&R。你会逐渐意识到,格式化在编程中并不重要。采用标准格式,将其应用于代码库,并实现自动化。这样,你就可以把精力重新集中在实际编写代码上。

死代码

所有这些注释块、未使用的变量和无法访问的代码都是腐烂的。它们实际上在告诉读者:“我不关心这些代码”。于是,一个衰退的循环开始了。随着时间的推移,这些死代码会毁掉你的代码库。这是经典的“破窗理论”。你必须寻找并摧毁死代码。虽然这不需要成为你的首要关注点,但要始终保持童子军的风范

嵌套代码

几乎所有代码的基础都是逻辑。我们编写代码是为了进行决策、迭代和计算。这通常会导致分支或循环,从而创建深度嵌套的代码块。虽然计算机可能很容易跟踪,但对于人类来说,这可能需要大量的脑力劳动。因此,代码看起来复杂且难以阅读。可以使用保护子句、提前返回或函数式编程的某些特性来解开嵌套代码。

使用对象

尽管如今已是面向对象编程的时代,我们依然对原始数据痴迷不已。我们常常在冗长的参数列表、数据块以及自定义数组/字典结构中发现这种痴迷。这些都可以重构为对象。这样做不仅可以形式化数据结构,还能为原始数据中所有重复的逻辑提供一个归宿。

大块

虽然我不坚持使用固定的数字,但代码块的长度可能会达到临界值。当你确定代码块很长时,就有机会识别重组重构代码。这个简单的过程可以让你确定代码块的上下文和抽象级别,以便你能够正确地识别职责,并将代码重构为更易读、更简单的代码块。

命名

当然,命名很难。但这只是因为我们让它变得难。有个小技巧在编程中对很多事情都管用,包括命名——延迟。永远不要纠结于命名。继续写代码。如果必须的话,给变量起个句子名也行。继续写代码。我保证,等你完成这个功能或工作的时候,一个更好的名字就会自然而然地出现了。

删除评论

正是这个做法改变了我最初的游戏规则。它让我走上了注重可读性的道路。尽管我努力解释,但总有人会因此而讨厌我。他们举了一个例子,说明注释是绝对必要的。当然,当哈勃望远镜遥测系统需要与旧式适配器接口,返回687未知读数时,可能需要通过注释来传达这一点。但对于几乎所有其他情况,你都应该挑战自己重写代码,使其不需要注释。

合理的回报

我们会返回一些最奇怪的值,尤其是边界情况。像-1、 或687、 或 这样的值null。反过来,大量的代码被编写来处理这些值。事实上, 的创建者null称之为“十亿美元的错误” 。你应该努力返回一个更合理的值。理想情况下,即使在出现负路径的情况下,调用代码也能继续运行。如果真的存在例外情况,那么有比 更好的方法来传达它们null

三的法则

想象一下一系列数学数字。我给你一个数字2,然后问:“下一个是什么?”可能是34,也可能是12.1。实际上你根本不知道。所以,我提供这个系列中的另一个数字2, 4,然后问:“下一个是什么?”可能是6816。同样,尽管我们信心倍增,但我们实际上也不知道。现在我提供这个系列中的另一个数字2, 4, 16,然后问:“下一个是什么?”现在有了三个数据点,我们的程序员大脑就能看到这个平方级数,并确定下一个数字是256。这就是三的法则

这个例子无需用代码来分散我们的注意力,就证明了我们不应该立即预先确定抽象或设计。“三分法则”通过推迟到拥有更多数据来做出明智决策,抵消了我们对抗重复的需求。用Sandi Metz 的话来说,“重复远比错误的抽象便宜得多。”

对称

现在来看看最后一种做法,它能让任何代码都具有近乎诗意的可读性——对称性。这直接摘自 Kent Beck 的《实现模式》,其中简单阐述道:

代码中的对称性是指同一个想法在任何地方都以相同的方式表达。

说起来容易做起来难。对称性体现了写作的创造性。它是许多其他实践的基础:命名、结构、对象、模式。它可能会因语言、代码库和团队而异。因此,你可能需要用一生去追求它。然而,一旦你开始将对称性应用于你的代码,一种更纯粹的形式就会出现,代码也会很快成型。


这些是对 _BaseCode 中实践的高级概述。我鼓励你查看本文链接中的资源,观看应用这些实践的截屏视频,或者阅读它们在BaseCode中实际代码片段中的完整应用

文章来源:https://dev.to/gonedark/10-practices-for-read-code-143a
PREV
42 个 Git 问题解答
NEXT
53 个项目创意,从初学者到高级入门