快速业务通道

冒号课堂§5.2:数据类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
需要更小心以避免破坏客户代码;另外它也可能造成滥用——将一个会叫会游的家伙放进池塘看起来不算坏主意,但如果一艘轮船趁机也轰隆隆地开了进来,事情恐怕就不那么美妙了。”

众皆莞尔。

冒号课堂§5.2:数据类型(4)

时间:2011-06-27 BlogJava xyz98

“再来看看静态类型语言的好处:由于在运行之前进行了类型检查,一方面代码的可靠性增强,符合发现错误要尽早的原则;另一方面编译器有可能藉此优化机器代码以提高运行效率,同时相比前者节省了运行期的耗费在类型检查上的时间和空间。此外,变量类型的声明彰显了编程者的意图,有辅助文档的功效。”冒号有条有理地解释着,“两种类型的体制可以用两种法律原则来类比:静态类型检查类似‘疑罪从有’的有罪推定制——在被证明合法之前是非法的,动态类型检查类似‘疑罪从无’的无罪推定制——在被证明非法之前是合法的。至于如何取舍,套用一句话:‘Static Typing Where Possible, Dynamic Typing When Needed’。不妨理解为:尽可能守规则,必要时求变通。”

句号俏皮地说:“规则如裤带,过于宽松和过于束缚都不好。”

问号提出新问题:“动态类型语言与弱类型语言有何不同?”

冒号喟言:“它们也常常被混为一谈,但类型的动静与强弱完全是正交的两个概念。静态类型语言中,有强类型的Java,也有弱类型的C;动态类型语言中,有强类型的Smalltalk,也有弱类型的JavaScript。前者以类型的绑定(binding)时间来划分,后者以类型的约束强度来划分。通常弱类型语言(weakly-typing language)允许一种类型的值隐性转化为另一种类型[5]。举个例子,1+"2"在VB中等于3——第二个字符串转化为整数;在JavaScript中等于"12"——第一个整数转化为字符串;在C中则等于一个不定的整数值——第二个字符串作为地址来运算。这样似乎很有趣很方便,但程序容易藏污纳垢,滋生臭虫(bug)。与此相对地,强类型语言(strongly-typed language)着意贯彻类型控制,为保障数据的完整性和代码的安全有效性,一般不允许隐性类型转换[6]。如果一定需要类型转换,必须是显性转换,一般通过我们熟知的铸型(cast)来完成。”

引号想起:“好像还有一种所谓的类型安全语言?”

逗号紧紧抱着头,仿佛害怕裂开。

“类型按安全性来划分,可分为类型安全语言(type-safe language)和类型不安全语言(type-unsafe language)。类型检查的目的就是为了避免类型错误(type error)[7],即杜绝因类型问题而产生的错误或不良代码。如果一个类型系统能完全做到这一点,它就被称为类型安全的。虽然尚存争议,但一般认为强类型语言对类型控制更严格,因而是类型安全的,弱类型语言是类型不安全的。类型安全固然对保障程序的合理性和可靠性十分重要,但若过于严苛,程序也就失去了活力,正所谓‘水至清则无鱼’啊。” 冒号有条不紊地解说着,“至此,我们已论及数据类型的三种划分方式。需要说明的是,这些划分并非泾渭分明的[8],更多的是定性而非定量的描述,甚至没有公认统一的定义。但了解它们,对我们理解编程语言和编程原则是大有裨益的。”

,插语

[1] Scala是动态语言,却是静态类型的。

[2] Visual Basic(不包括VB.NET) 支持动态类型,却是静态语言。

[3] 极少数语言没有类型检查(untyped或typeless),如大多数汇编语言、Forth语言等。

[4] C#4.0将支持duck typing。

[5] 隐式转换也称为强制转换(coercion)。有人将显式转换的铸型(cast)译为强制转换,并不准确。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号