Java程序员,你为什么要关注Scala

发表于:2011-1-31 09:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

分享:
  那么“自我类型上的抽象”究竟是什么意思?比如在一个类中,this类型代表什么意思?你会说,“表示这个类的类型。”大多数人都会这么回答。但实际上却没有任何令人信服的理由。This类型很可能是指其他的东西。只存在一个界定条件,就是当你实际创建一个类的实例的时候,然后这个你所创建的对象就与该类有同样的功能。这就与处理抽象方法时相同。你可以在一个类中定义一个抽象方法,并且不需要实现。这其实并不危险,因为当你创建一个该类的实例时,你将会检查是否所有抽象方法都有具体实现。因此,自我类型的抽象只是这种问题的一个一般化,也可以让你处理域和类型。

  自我类型抽象的技术非常值得探索。早期,我们建立一种演算来研究这个问题,称为nu对象演算—νObj,我们于2003年,在面向对象程序设计欧洲会议上公布它( ECOOP 2003年)。我们最初发现这一概念只是作为一个技术诀窍,为了使演算过程能够简单。直到后来开始使用它之后我们发现,也许这将是有益于语言的东西。那时候我们还不太了解到底会有什么用处,但我们决定尝试。直到后来,我们才发现,它实现了我们想要的,即让一个Traits声明它所需要的来自其他 Traits的东西。这就像是现在的一些工具,如Spring所实现的功能,被称为依赖注入。但通常这种依赖注入只能适用于域,也许对方法也管用,但我们可以让它还能应用于类型。此外,在Scala中,这种注入是静态完成而不是运行时完成,其次,它达到了对于内部类型的类型安全要求。因此,从某种意义上说,它比目前的一些工具如Spring做的更好。

  我为什么要学习Scala?有什么好处吗?

  Bill Venners:以后的采访中,我们将会继续再次探讨依赖注入,您刚才谈到关于自我类型的“抽象”。您提到的必须要解决的两件事是函数式和面向对象的融合以及面向对象的创新。如果我的工作室Java编程,在实际工作中,这些东西如何能够帮助我?我能得到什么实质的益处?

  Martin Odersky:我们正面临的挑战之一,是我们想融合函数式和面向对象。我们很早就确定了这种概念,即不可变类是非常非常重要的。现在大家都在谈论不可变类,因为人们认为这是解决目前由多核电脑所引起的问题的一个关键方法。大家都说,不管你做什么,你都要尝试让你的代码尽可能多的使用不可变类。在 Scala中,我们也从很早就采用这种方法。五,六年前,我们开始深刻考虑不可变的类。但事实证明,大量的面向对象领域一直都在使用可变对象。对于他们来说,可变状态和对象是同一回事:可变状态是一个对象中必不可少的组成部分。我们必须从本质上解释这个问题。

  例如,对于一个标准的Java对象,你将创建一个域,基本上是一个可变域。然后你还需考虑构造函数,接收参数并为域赋值。这就是可变的概念,内置到每一个Java类。现在,Java具有final域概念,它不被认为是可变的,因为它只在构造函数中被赋值一次。但你仍然能看到赋值操作。我们希望能有一个更清晰的概念,让你不需要看到构造函数和赋值操作。

  使用Scala我们最后所做的事是直接确定类的参数。你只需要在类名后写一个参数列表,这些就成为类的参数。不存在独立可变域和构造函数的概念,这些实际上转变成了一些我们必须要解决的问题。其中之一是,如果你想要有几个构造函数,那要怎么办?我们必须为其确定语法和规则。你可以在你的 primary(主要)构造函数之外使用auxiliary(辅助)构造函数。另一个问题是,如果你希望你的参数作为一个域可见化,该怎么办?需要创建一个单独的域,然后再赋值吗?或者是有可能传递参数给一个类,然后立即变成一个域而对其他人可用?因此,我们必须为其创建语法,我相信这种做法也是全新的。最后在面向对象方面还有很多其他新颖的想法。

  Bill Venners:对于我这样的一个Java程序员,能得到什么益处?

  Martin Odersky:好处就是你可以用更简洁的语法来定义类。使用Scala编写类,能够更容易、更简洁。如果你想要使用不可变类,那将更加容易,因为它非常适合做这件事。你还可以像使用Java那样来使用Scala定义可变类。这甚至比用Java更方便,但Scala真正耀眼的地方还在于它的不可变类。它比 Java更自然、更简明。

  编者后记:

  随着业界开始流传基于JVM的语言正在开始流行这样的声音,处在基于JVM的非Java语言之首的Groovy和Scala被寄以相当大的期望。曾经有一篇英文文章对于几个JVM语言(Groovy,Scala和JRuby)进行了比对,结果是无论从速度,缓存需求还是垃圾处理方面,Scala都是最适合企业级开发的语言。究竟 Scala是否真的如此神奇,还让我们拭目以待。
33/3<123
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号