Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101971
  • 博文数量: 18
  • 博客积分: 681
  • 博客等级: 中士
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-17 13:33
文章分类
文章存档

2012年(8)

2011年(10)

分类: Python/Ruby

2011-12-30 20:29:26

类型到底是什么,如对于一块32位的内存,里面存放01串,其既可以解释成整型,也可以解释成浮点数,而它们的底层表示是一样的,因此说到底类型是对数据的解释。解释可以看作是解码,运用预先定义的规则解码,把一块01串解释成某个有意义的东西。把浮点数/整型代表的数看作是值,那么我们可以得到:

数据+类型=值。

在编程语言上老是有强类型和弱类型之争,按照上面解释的,不论什么语言,最终总要把数据解释成值的,也就是说一定会有类型系统的,那么强类型和弱类型到底区别在哪里呢?虽然不能很正式地给出强类型和弱类型语言的区别,我们可以通过例子来对强类型和弱类型进行一个简单的认识。强类型和弱类型最大的区别在于函数的定义与调用,下面为用Erlang和C++写的两个函数,

Erlang:
  1. add(X) -> X+1.
  2. add(1),
  3. add(2.5).
C++:
  1. add(int X) {
  2. return X+1;
  3. }

  4. add(5);
  5. add(5.5);
对上面两个小程序进行简单的分析,可以得到以下结果:
  1. C++的函数定义需要指定函数参数的类型,这是因为在编译期间,编译器必须知道函数的参数类型,然后判断函数调用处的函数参数类型是否正确;而Erlang函数定义并没有指定参数类型,那么最终执行时,解释器是如何知道参数的类型的呢?在于函数调用add(1),这里的1其实已经具有类型了。
  2. 从上面一小点可以看出,强类型意味着程序员得事先定义好函数参数的类型;而弱类型,函数参数的类型并不确定,当函数调用时,解释器会首先把函数逻辑运用于参数,如果运用不成功,那么解释器会报错,这样的话,程序员不必事先定义参数的类型。
  3. 从上面一点看,强类型和弱类型的优缺点就很明显了。强类型在编译期间能够保证函数调用的参数类型正确,从而牺牲了灵活性;而弱类型很灵活,写出的代码相应来说较短,这可能也就解释了为什么很多牛人都喜欢lisp了吧。
阅读(1798) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~