直观的类型
自然语言中的类型
在知道类型系统的定义之前,我们其实都已经是汉语这门自然语言中的「类型」专家了。
例 1:997 是一个质数。
*例 2:997 是一个跑。
如果我们来判断这句话第二句话是否正确,我们可以立刻下结论——它是错的——而不用去理解这个命题涉及的任何数学概念。因为这句话在语法上就是错的。这其实就是一种类型检查。
那么,在编程语言这个形式系统里,我们是不是也可以有类似的快速「检查」?
——这样,我们可以用很低的成本来验证程序是否是对的,而不需要去跑程序本身。
编程语言中的类型
在一些编程语言中,变量的类型可以在运行程序之前就能确定下来。具有这种性质的语言,叫做静态类型语言;反之,则叫做动态类型语言。
// CPP 是一门静态类型语言
bool a = true;
a = "test"; // 会在编译时报错
// JavaScript 是一门动态类型语言
let a = true;
a = 'b'; // 完全合法
而有一些编程语言当中,表达式类型之间的转化需要显式地进行,锱铢必较。
这种语言,叫做强类型语言(Strongly-typed Languages);
反之,那些类型之间的转化大都可以隐式进行的,叫做弱类型语言(Weakly-typed languages)。
注意:强弱类型其实是一个比较主观的概念,并没有非常严格的定义。