转载

编程语言强弱类型,动静类型之分

最近用空闲时间看了一本书<冒号课堂>,内容虽然宽泛,但是仍读到了一些有用的知识,并纠正了一些关于语言上的错误概念.

  • 数据类型包含两个要素:

    1. 允许取值的集合
    2. 允许参与的运算 如: int在java中既定义了-2的31次方和2的31次方减一的整数集合, 也定义了该集合上的整数能进行的运算
  • 数据类型的意义

限定一个变量的数据类型,就意味着限制了该变量的取值范围和所参与的运算,这从一定程度上保证了代码的安全性

动静态类型语言

  • 动态类型语言 类型检查发生在运行期间,编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误.

    python,php,javascript是动态类型的

  • 静态类型语言 类型检查发生在运行之前,编译的时候不知道每一个变量的类型,因为类型错误而不能做的事情是运行时错误.譬如说你不能对一个数字 a 写 a[10] 当数组用,并且可以在运行期间改变变量的类型

    例如: a = 0; a = [] ;

    java, C, C++是静态类型的

    然而因此有人认为需要显式的声明变量类型的语言,但是这是错!!的

    Haskell就是不需要显式声明类型的,但是它是静态的

强弱类型语言之分

  • 强类型: 偏向于不容忍隐式类型转换.

    例如: python不容许'a'+1;

>>> 'a'+1 Traceback (most recent call last):     File "<stdin>", line 1, in <module> TypeError: Can't convert 'int' object to str implicitly 

所以,python,ruby,java是强类型语言.

  • 弱类型: 偏向于容忍隐式类型转换.

    例如: javascript容许'a'+1

> 'a'+1 'a1'   

所以: C,PHP都是弱类型语言

以上内容是不是有点颠覆三观?

原文  http://giantming.net/bian-cheng-yu-yan-qiang-ruo-lei-xing-dong-jing-lei-xing-zhi-fen-md/
正文到此结束
Loading...