类型系统的准确性和实用性
什么是准确性和实用性
举一段例子:
var a: int[] = [1, 2, 3]
var b = a[index]
// ~: b 是什么类型?
以上代码在运行时,如果 index 未越界,则 b
的类型是 int
,否则为 null
。
从准确性考虑:b
的类型是 int | null
。
从实用性考虑:越界访问数组的情况很少,将 b
的类型看作 int
,可以简化代码。
结论:实用性优先
编程语言不只是一种技术,更是为了解决用户需求的产品。
准确性有助于帮助用户降低调试时间,但为了准确性,就可能会增加编码的时间。
从用户角度,用户更关心编程+调试的总时间是否减少,而不只关心调试时间是否减少。
所谓的实用性优先,即优先保证用户只需用最少的代码,即可完成写出准确性不高的代码。
这时用户可以选择通过增加代码量来提升准确性,或通过测试保证实际的结果是符合预期的,而不应该在编程语言层面强制要求用户写出 100% 准确的代码。因为即使语言层面 100% 准确的代码,也不能确保没有 BUG。