快速业务通道

跨越边界:浅谈Java模型以外的类型策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
通过声明或根据约定)或编译器(根据结构和语法线索)将一种类型指 定给一个变量,然后那个类型就不会改变。静态类型通常需要额外的成本,因为静态类型语言(例如 Java 语言)通常是显式类型的。这意味着必须声明所有的变量,然后编译代码。成本也伴随着收益:早 期的错误检测。静态类型在最基层为编译器提供多得多的信息。更多信息所带来的好处就是,可以更早地 捕捉到某些类型的错误,而动态类型语言只有到运行时才能检测到这些错误。如果您一直等到运行时才捕 捉这些 bug,那么其中一些将进入生产环境。也许这正是动态类型语言受到最多指责的一个方面。

另一种观点则认为现代软件开发团队通常会运行自动测试,动态语言的支持者声称,即使是最简单的 自动测试也可以捕捉到大多数的类型错误。而动态语言的支持者所能提供的对编译时错误检测不利的最好 论据是,早期检测所带来的好处相对于成本来说是得不偿失的,因为不管是否使用动态类型,最终都要进 行测试。

一种有趣的折中方法是在静态类型语言中使用隐式类型,从而减少类型的成本。开放源代码语言 Objective Caml (OCaml) 是静态类型语言 Lisp 的衍生物,它既能提供很好的性能,又不会牺牲生产率 。OCaml 使用隐式类型,因此可以编写下面这样的采用静态类型的代码:

# let x = 4+7

OCaml 返回:

val x : int = 11

根据表达式中的语法线索,OCaml 推断出 x 的类型。4 是 int 型,7 也是 int 型,因此 x 也必定 是 int 型。隐式类型语言可以拥有 Java 语言所具有的所有类型安全性,甚至更多。不同之处在于您需 要提供的信息量,以及在阅读程序时可用的信息量。很多喜欢静态类型的人更偏爱隐式类型。他们宁愿让 编译器来做这种事情,而不愿意被迫重复地在代码中输入变量的类型。

隐式类型系统一个较大的优点是,不需要为函数的参数声明类型,因为编译器会从传入的值推断出参 数的类型。因此同一个方法可以有多种用途。

关于重构的谬误

有些人认为,要获得具有重构(refactoring)支持的良好 IDE,就必须具有静态类型特性,这种观点 是荒谬的。大多数现代 IDE 多少从早期的 Smalltalk IDE 中吸收了一些东西。实际上,Eclipse 早期也 有一些基本的东西是 Visual Age for Java 中的,而后者最初就是被发布在 Smalltalk 虚拟机上! Smalltalk Refactoring Browser 仍然是如今可用的功能最完善的重构工具之一(见参考资料)。Java 语言仍然比大多数流行的动态语言(除了 Smalltalk)具有更好的工具,静态类型是最大的原因。

并不是只有编译器才能利用静态类型所提供的附加信息。IDE 可以通过静态类型为重构提供更好的支 持。几年前,一种革命性的思想改变了开发环境的工作方式。在 IDEA 和 Eclipse 中,您的代码看上去 像一个文本视图,但是开发环境实际上正在编辑 Abstract Syntax Tree (AST)。因此,当需要重新命名 一个方法或者类的时候,开发环境很容易通过在 AST 中精确定位找到方法或类被引用的每个地方。如今 ,如果没有通过静态类型简化的优秀的重构,我们很难想像用 Java 语言编程。在我探索 Ruby 的时候, 相对于其他任何工具或特性,我更怀念 IDEA。

静态类型还有其他一些优点,在这里我不会详细描述。静态类型可以提供更好的安全性,而且显然还 可以提高代码的可读性。静态类型还可以提供更多的信息,使得编译器更容易进行优化,从而提高性能。 但是静态类型赢得开发人员青睐的最大原因是更容易检测错误,而且有更多可用的工具。

动态类型的优点

Ruby 专家 Dave Thomas 将动态类型称作duck typing(见参考资料),这有两层意思。第一层意思是 说,这种语言不真正实现类型 —— 它利用鸭子理论 解决这个问题。第二层意思是说,如果什么东西走 起来像鸭子,叫

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号