动态类型语言和静态类型语言

https://www.cnblogs.com/liuning8023/p/4286044.html   动态类型语言和静态类型语言


本文主要说明动态类型语言和静态类型语言。

类型检查所进行的检验处理以及实行类型的约束,可发生在编译时期(静态检查)或运行时期(动态检查)。静态类型检查是在编译器所进行语义分析中进行的。如果一个语言强制实行类型规则就称此处理为强类型(或静态类型),反之称为弱类型(或动态类型)。另外,严格意义上,强类型与静态类型不是一回事,同理,弱类型与动态类型。

强类型是指某门语言检查两种类型是否兼容,如果不兼容就抛出一个错误或强制类型转换,尽管这个说法并不是很严格。静态类型强迫在类型结构的基础上执行多态。判断是否是一只鸭子的依据,是其基因蓝图(静态),还是因其叫声和走路的姿态像一只鸭子(动态)。静态语言的好处在于编译器和工具等对你的代码更加了解,可以用于捕捉错误,突出显示代码以及便于重构代码。付出的代价是你不得不做更多的工作,并且会受到一些限制。

动态类型语言(Dynamically Typed Language)


所谓动态类型语言,就是类型的检查是在运行时才做。

类型对于变量,属性,方法以及方法的返回类型都是可有可无的,在给变量赋值时才决定它的类型, 之后,还可以赋值不同类型的值,即使是基本类型,比如 C# 装箱(boxing)和拆箱(unboxing),可以把值类型转换成引用类型,引用类型转换成值类型。当需要时,很多类型之间都会发生自动转换,可以把不同的基本类型添加到同一数组(collections)中。

动态类型在解释语言中极为普遍,如 JavaScript、Perl、Python、Ruby 等等。

静态类型语言(Statically Typed Language)


静态类型语言的类型检查是在运行前的编译阶段,比如 C#、Java 等都是静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以,一般动态语言都会采用 dynamic typing。静态类型语言常出现于编译语言中,比如,Java,实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。

“多态性”是指,代码(尤其是函数和类)对各种类型的值能够动作,或是相同数据结构的不同实体能够控制不同类型的元素。在具有多态性的语言中,只需实现如列表或词典的数据结构一次,而不是对使用到它的元素的每一个类型都规划一次。基于这个原因,电脑学家也称使用了一定的多态性的方法为泛型程序设计。

推断类型(鸭子类型,Duck typing),这个技术之所以常被称作“鸭子类型”,是基于这句格言:“如果它摇摇摆摆的走法很像鸭子,而且它的嘎嘎叫声也像鸭子,那它就是一只鸭子!(If it waddles like a duck, and quacks like a duck, it's a duck!)”最初是由 Dave Thomas 在 Ruby 社区中提出的,推断类型用了这个论证法“如果它像什么,而且其它地方也像什么,那么它就是什么。”,比如,C++在迭代器和指针之间的双重性,两者以不同的机制实现并提供一个* 运算;C# 可以用 var 关键字声明变量,还有委托推断。

比较


静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是需要写更多的类型相关代码(如声明变量),不便阅读(特别是,当你看别人代码时,会连变量定义也看吗?想必不会,看结构,看方法的含义想必才是本质)。

动态类型语言的优点在于方便阅读,不需要写非常多的类型相关代码;缺点自然是不便调试,命名不规范时会造成读不懂,不利于理解等。

在强类型、静态类型语言的支持者,与动态类型、自由形式的支持者之间,经常发生争执。前者主张,在编译的时候就可以较早发现错误,而且还可增进运行时期的性能。后者主张,使用更加动态的类型系統,分析代码更为简单,减少出错机会,才能更加轻松快速的编写程序。


动态类型语言静态类语言是两种不同的编程语言类型动态类型语言是指在运行时进行类型检查的编程语言。这意味着变量的类型是在运行时确定的,可以在程序中自由地改变变量的类型动态类型语言通常具有更灵活的语法和更少的类型限制,使得编写代码更加简洁和灵活。常见的动态类型语言有Python和JavaScript。 静态类语言是指在编译时进行类型检查的编程语言。这意味着变量的类型在编写代码时就需要确定,并且不能随意改变其类型静态类语言需要在编写代码时显式地声明变量的类型,并且在编译时会进行类型检查,以确保类型的一致性和正确性。常见的静态类语言有C++和Java。 区别: 1. 类型检查动态类型语言在运行时进行类型检查,而静态类语言在编译时进行类型检查。 2. 变量声明:动态类型语言不需要显式声明变量的类型,而静态类语言需要在编写代码时显式地声明变量的类型。 3. 灵活性:动态类型语言具有更大的灵活性,可以在运行时改变变量的类型,而静态类语言的变量类型在编译时就需要确定,无法随意改变。 4. 错误检查静态类语言在编译时可以检测到一些类型相关的错误,而动态类型语言只能在运行时才能检测到类型错误。 需要注意的是,动态类型语言静态类语言各有优缺点,并不是绝对好坏之分,选择使用哪种类型的编程语言要根据具体的需求和场景来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值