14.4 一致地使用名称
好名称的第二个重要属性是一致性。在任何程序中,都有某些变量被反复使用。例如,一个文件系统会反复操作块号。对于这些常见的用法,选择一个名称用于该目的,并在所有地方使用同一个名称。例如,一个文件系统可能总是使用fileBlock
来保存文件中一个块的索引。一致性的命名减少了认知负荷,其方式与重复使用一个普通的类一样:一旦读者在一个上下文中看到某个名称,当他们在不同的上下文中看到这个名称时,他们就可以重用他们的知识,立即做出假设。
一致性有三个要求:第一,总是为特定目的使用通用名称;第二,永远不要在特定目的之外的地方使用通用名称;第三,确保目的足够狭窄,所有带有该名称的变量都有相同的行为。在本章开头的文件系统bug中,这第三个要求被违反了。那个文件系统用block
来表示具有两种不同行为的变量(文件块和磁盘块);这导致了对变量含义的错误假设,这转而又导致了一个bug。
有时你会需要多个变量来指代相同的通用事物。例如,一个复制文件数据的方法将需要两个块号,一个用于源文件,一个用于目标文件。当这种情况发生时,为每个变量使用通用的名称,但要添加一个区别性的前缀,比如 srcFileBlock
和 dstFileBlock
。
循环是一致性的命名可以帮助的另一领域。如果你对循环变量使用i
和j
这样的名称,请总是在最外层的循环中使用i
,在嵌套循环中使用j
。这使得读者在看到一个给定的名称时,可以对代码中发生的事情做出即时(安全)的假设。
Last updated