跳到主要内容

直观的类型

自然语言中的类型

在知道类型系统的定义之前,我们其实都已经是汉语这门自然语言中的「类型」专家了。

例 1:997 是一个质数。

*例 2:997 是一个跑。

如果我们来判断这句话第二句话是否正确,我们可以立刻下结论——它是错的——而不用去理解这个命题涉及的任何数学概念。因为这句话在语法上就是错的。这其实就是一种类型检查。

那么,在编程语言这个形式系统里,我们是不是也可以有类似的快速「检查」?

——这样,我们可以用很低的成本来验证程序是否是对的,而不需要去跑程序本身。

编程语言中的类型

在一些编程语言中,变量的类型可以在运行程序之前就能确定下来。具有这种性质的语言,叫做静态类型语言;反之,则叫做动态类型语言。

// CPP 是一门静态类型语言
bool a = true;
a = "test"; // 会在编译时报错
// JavaScript 是一门动态类型语言
let a = true;
a = 'b'; // 完全合法

而有一些编程语言当中,表达式类型之间的转化需要显式地进行,锱铢必较。

这种语言,叫做强类型语言(Strongly-typed Languages);

反之,那些类型之间的转化大都可以隐式进行的,叫做弱类型语言(Weakly-typed languages)。

注意:强弱类型其实是一个比较主观的概念,并没有非常严格的定义。