快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

跨越边界:浅谈Java模型以外的类型策略

时间:2011-07-22 IBM Sailing

当谈到 Java 语言的类型方法时,Java 社区分为两大阵营。一些人喜欢编译时错误检查,更好的安全 性,以及改善的工具 —— 这些都是静态类型所能提供的特性。而另一些人则偏爱更动态的类型体验。这 一次在 跨越边界 中,您将看到两种高生产力的非 Java 语言所使用的一些截然不同的类型策略,并发现 在 Java 编程中提高类型灵活性的一些方法。

在对任何编程语言的讨论中,争议较大的一个问题就是类型模型。类型决定可以使用哪些种类的工具 ,并影响到应用程序的设计。很多开发人员将类型与生产率或可维护性联系起来(我就是其中的一个)。 典型的 Java 开发人员通常都特别乐于维护 Java 语言的类型模型的地位,强调 Java 语言可采用更好的 开发工具,在编译时捕捉某些种类的 bug(例如类型不兼容和拼写错误),以及性能等方面的优势。

如果您想理解一种新的编程语言,甚至一系列语言,那么通常应该从类型策略着手。在本文中,您将 看到 Java 之外的一些语言中的类型模型。我首先简要介绍任何语言设计者在类型模型中必须考虑的一些 决策,着重介绍静态类型和动态类型的一些不同的决策。我将展示一些不同极端的例子 —— Objective Caml 中的静态类型和 Ruby 中的动态类型。我还将谈到 Java 语言的类型限制,以及如何突破 Java 类 型的限制快速编程。

类型策略

至少可以从三个角度来看待类型:

静态类型还是动态类型,这取决于何时 实施类型模型。静态类型语言在编译时实施类型。而动态类型 语言通常基于一个对象的特征在运行时实施类型。

强类型还是弱类型,这取决于如何 实施类型模型。强类型严格地实施类型,如果发现有违反类型规则 的情况,则会抛出运行时或编译时错误。而弱类型则留有更多的余地。极端情况下,弱类型语言(例如 Assembler)允许将任意数据类型赋给另一种类型(不管这种赋值是否有意义)。静态类型的语言既可以 有强类型,也可以有弱类型;而动态类型系统通常是强类型的,但也不完全是。

显式类型还是隐式类型,这取决于语言如何确定一个给定对象的类型。显式类型语言要求声明每个变 量和每个函数参数。而隐式类型语言则根据语言中的语法和结构线索来确定对象的类型。静态类型语言通 常是显式类型的,但也不完全是;而动态类型语言几乎都是隐式类型的。

下面两个例子很好地阐释了其中两个角度的内涵。假设您编译下面这段 Java 代码:

class Test { public static void test(int i) { String s = i; } }

会收到如下错误消息:

Test.java:3: incompatible types found : int required: java.lang.String String s = i; ^ 1 error

执行以下 Ruby 代码:

1 + "hello"

会收到以下错误消息:

TypeError: String can''t be coerced into Fixnum from (irb):3:in ''+'' from (irb):3

这两种语言都倾向于强类型,因为当您试图使用一个它们期望之外的类型结构的对象时,它们都会抛 出错误消息。Java 类型策略在编译时给出错误消息,因为它执行静态类型检查。而 Ruby 则是在运行时 给出错误消息,因为 Ruby 支持动态类型。换句话说,Java 在编译时将对象绑定到类型。而 Ruby 则是 在运行时每当更改对象的时候将对象绑定到类型。由于我是在 Java 代码中,而不是在 Ruby 中声明变量 的,因此可以看到 Java 语言的显式类型与 Ruby 的隐式类型的工作方式不同。

在这三个角度中,静态类型与动态类型对于语言的特征有最大的影响,因此接下来我将重点解释这两 种策略各自的优点。

跨越边界:浅谈Java模型以外的类型策略(2)

时间:2011-07-22 IBM Sailing

静态类型的优点

在静态类型语言中,程序员(

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