快速业务通道

Java.next:第一部分——共同点 - 编程入门网

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

Java.next:第一部分——共同点

时间:2011-01-29 译: 梦幻泡影露电

本文是Java.next系列的第一部分。在这一部分,我将探讨作为Java.next的语言所具有的共同特征。

我选择了四种语言作为“Java.next”的代表:Clojure,Groovy,JRuby,以及Scala。乍看起来,这几种语言有着 很大的不同。Clojure是Lisp方言;Groovy是作为“类Java”的选择;JRuby即具有Ruby语言的优雅,同时也有着Rails所带来 的优势;与其他都不一样的是Scala,它有着静态语言所具有的特点。

正如你所料想的一样,有很多关于这些语言中谁才是最好的辩论。之所以有着这么多的辩论,很大程度上是因为这些语言有着很多共同点。它们有着一个共同的演变背景:Java语言。Java语言所具有的优点以及缺陷影响着这些语言的设计方向。

在这篇文章中,我着重从下面两个方面来阐述这些语言的共同点:

☆ 过去的10年中,我们在基于虚拟机、面向对象的语言编程中得到了很多关于如何开发易读的、可维护的应用。Java.next吸取了这些成果,使得这些语言更注重于问题的本质而不是形式。

☆ “本质 VS 形式”的设计理念使得编程方式发生了很大的改变,这种观念的变化比以前从C/C++到Java的转变更大。

我将Java.next所具有的共同优点概括为以下八点:

● 一切皆对象

● 简洁的属性定义方式

● 易用的集合类

● 函数式编程

● 运算符重载

● 可维护的异常处理

● 给已有类增加新方法

● 创建新的语言结构

一切皆对象

在Java中,我们每时每刻都要面对对象类型与基本类型的不同之处。这种不同导致三个实际问题:

1.API必须写两份:一个针对对象类型;一个针对基本类型。更糟糕的情形是需要重写多份:一个针对对象类型,然后对每一个基本类型各写一份。

2.默认的数值类型有着范围限制,一旦越界,程序会以诡异的形式中断。

3.对于那些高精度类型(译者注:指BigInteger等类型),你不能使用直观的数学操作符(+,-,etc.)来操作它们。

在Java.next中,一切皆是对象。你可以在所有的类型上使用相同的语法调用方法。

; clojure (. 1 floatValue) 1.0 // groovy 1.floatValue() ===> 1.0 # ruby 1.to_f => 1.0 // scala 1.floatValue res1: Float = 1.0

Java.next:第一部分——共同点(2)

时间:2011-01-29 译: 梦幻泡影露电

简洁的属性定义方式

在Java中建立一个属性,你必须定义一个域,一个Getter,一个Setter,以及(通常)一个相应的构造函数,每一个定义都需要适当的访问修饰词。在Java.next中,你可以毕其功于一役。

; clojure (defstruct person :first-name :last-name) // groovy class Person {    def firstName    def lastName } # ruby Person = Struct.new(:first_name, :last_name) // scala case class Person(firstName: String, lastName: String)

如果你需要复写(或删除)一个Getter,Setter或是构造函数,你也可以做到,而无需重写其它部分。

这还不是全部。所有这些语言信奉TMTOWTDI (There''s More Than One Way To Do It),因此这儿不止一种方式可以实现上面同样的要求。

易用的集合类

Java.next针对大部分重要的集合类提供了便利的语法:array与map。此外,你可以通把将函数作为参数将一系列操作连贯起来,而避免使用Java中那种显式的迭代或循环方式。譬如:找出100以内的奇完全平方数:

; clojure (filter (fn [x] (= 1 (rem x 2))) (map (fn [x] (* x x)) (range 10))) (1 9 25 49 81) // groovy (1..10).collect{ it*it }.findAll { it%2 == 1} ===> [1, 9, 25, 49, 81] # ruby (1..10).collect{ |x| x*x }.select{ |x| x%2 == 1} => [1, 9, 25, 49, 81] // scala (1 to 1

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