- 编程与类型系统
- (美)弗拉德·里斯库迪亚
- 653字
- 2025-03-31 19:45:05
1.2.5 可读性
读代码的时间往往比写代码的时间更多。类型能够清晰表明函数期望得到什么实参,泛型算法的先决条件是什么,类实现了哪个接口,等等。这些信息很有用,因为它允许我们单独思考可读的代码:只需查看定义,我们就能够比较轻松地理解代码的工作方式,而不必去源代码中查看调用者和被调用者。
名称和注释对于理解代码也很重要,但是类型则添加了另外一层信息,因为它允许我们指定约束。看看程序清单1.11中没有指定类型的find()函数的声明。
程序清单1.11 未类型化的find()

单纯看这个函数,很难明白它期望得到什么类型的实参。我们需要阅读其实现,传入我们认为最有可能的类型的实参,然后看是否会发生运行时错误,或者我们需要寄希望于文档中介绍了相关信息。
将前面的声明与程序清单1.12进行一下比较。
程序清单1.12 类型化的find()

从这个声明中可以看到,对于任意类型T,我们需要提供一个数组T[]作为range实参,提供一个接受T作为参数并返回一个boolean值的函数作为p实参。我们还可以马上看到,这个函数将返回T或者undefined。
我们不必找到函数实现或者查看文档,只需阅读这个声明,就可以知道应该传递什么类型的实参,这就降低了认知负担,使我们可以把它作为一个自包含的、独立的实现来对待。像这样明确指定的类型信息不仅可被编译器利用,开发人员也可以参考,这使理解代码变得简单了许多。
大多数现代语言都提供了一定程度的类型推断,即基于上下文来推断变量的类型。这可以减少冗余输入,所以很有用,但是当编译器能够轻松理解代码,而人却很难理解时,类型推断就会成为问题。明确指定的类型比注释更有帮助,因为编译器会确保类型正确。