类型到底是什么,如对于一块32位的内存,里面存放01串,其既可以解释成整型,也可以解释成浮点数,而它们的底层表示是一样的,因此说到底类型是对数据的解释。解释可以看作是解码,运用预先定义的规则解码,把一块01串解释成某个有意义的东西。把浮点数/整型代表的数看作是值,那么我们可以得到:
数据+类型=值。
在编程语言上老是有强类型和弱类型之争,按照上面解释的,不论什么语言,最终总要把数据解释成值的,也就是说一定会有类型系统的,那么强类型和弱类型到底区别在哪里呢?虽然不能很正式地给出强类型和弱类型语言的区别,我们可以通过例子来对强类型和弱类型进行一个简单的认识。强类型和弱类型最大的区别在于函数的定义与调用,下面为用Erlang和C++写的两个函数,
Erlang:
- add(X) -> X+1.
-
-
add(1),
-
add(2.5).
C++:
- add(int X) {
-
return X+1;
-
}
-
-
add(5);
-
add(5.5);
对上面两个小程序进行简单的分析,可以得到以下结果:
- C++的函数定义需要指定函数参数的类型,这是因为在编译期间,编译器必须知道函数的参数类型,然后判断函数调用处的函数参数类型是否正确;而Erlang函数定义并没有指定参数类型,那么最终执行时,解释器是如何知道参数的类型的呢?在于函数调用add(1),这里的1其实已经具有类型了。
- 从上面一小点可以看出,强类型意味着程序员得事先定义好函数参数的类型;而弱类型,函数参数的类型并不确定,当函数调用时,解释器会首先把函数逻辑运用于参数,如果运用不成功,那么解释器会报错,这样的话,程序员不必事先定义参数的类型。
- 从上面一点看,强类型和弱类型的优缺点就很明显了。强类型在编译期间能够保证函数调用的参数类型正确,从而牺牲了灵活性;而弱类型很灵活,写出的代码相应来说较短,这可能也就解释了为什么很多牛人都喜欢lisp了吧。
阅读(1766) | 评论(0) | 转发(0) |