快速业务通道

面向Java开发人员的Scala指南 - Scala控制结构内部揭密 - 编程入门网

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

面向Java开发人员的Scala指南 - Scala控制结构内部揭密

时间:2011-01-30 Ted Neward

Scala 是专为 Java™ 平台编写的,因此其语法设计会使 Java 代码编码人员感觉很轻松。同时,Scala 为 JVM 提供了函数语言的固有的强大功能,并以这些函数设计概念为出发点。在这一期的 面向 Java 开发人员的 Scala 指南系列 文章中,Ted Neward 将介绍两种语言之间的细微差异,从一些控制结构(比如 if、while 和 for)开始介绍。正如您将要学习到的那样,Scala 为这些结构提供了一些在其 Java 等效物中无法获得的功能和复杂性。

迄今为止,在此 系列 中,我们已经讨论了 Scala 对生态环境的保真度,展示了 Scala 如何将众多的 Java 核心对象功能合并在一起。如果 Scala 只是编写对象的另一种方式,那么它不会有任何引人注意的地方,或者说不再那么功能强大。Scala 的函数概念和对象概念的合并,以及它对编程人员效率的重视,这些使得学习 Scala 语言比 Java-cum-Scala 编程人员所想象的体验更加复杂、更加微妙。

例如,对控制结构(比如 if、while 和 for)使用 Scala 的方法。尽管这些控制结构看起来类似一些老的、还比较不错的 Java 结构,但实际上 Scala 为它们增加了一些完全不同的特性。本月的文章是关于使用 Scala 控制结构时能够期望获得哪些东西的入门级读物,而不是在制造许多错误(并编写一堆错误代码)之后,让您冒着遭受挫折的风险去寻找差异。

修订后的 Person.scala

在 本系列的上一篇文章 中,可以了解到 Scala 能够通过定义一些方法来定义 POJO,这些方法模仿基于 POJO 的环境所需的传统 “getter 和 setter”。在这篇文章发表之后,我收到了 Bill Venners 发来的电子邮件,Bill Venners 是即将发表的正式的 Scala 参考资料使用 Scala 编程(请参阅 参考资料)的合著者之一。Bill 指出了实现上述操作的一个更简单的方法,即使用 scala.reflect.BeanProperty 标注,如下所示:

清单 1. 修改后的 Person.scala

class Person(fn:String, ln:String, a:Int)    {    @scala.reflect.BeanProperty    var firstName = fn    @scala.reflect.BeanProperty    var lastName = ln    @scala.reflect.BeanProperty    var age = a    override def toString =      "[Person firstName:" + firstName + " lastName:" + lastName +      " age:" + age + " ]"    }

清单 1 中的方法(上一篇文章 中的清单 13 的修订版)为指定的 var 生成了 get/set 方法对。惟一的缺陷是这些方法并不实际存在于 Scala 代码中,因此其他 Scala 代码无法调用它们。这通常不是什么大问题,因为 Scala 将对为自己生成的字段使用已生成的方法;如果事先不知道,那么这些对您而言可能是一个惊喜。

在查看了清单 1 中的代码之后,最让我感到震动的是,Scala 并没有只演示组合函数概念和对象概念的强大威力,它还演示了自 Java 首次发布之后的 30 年里对象语言带来的一些益处。

控制是一种幻想

您将看到的许多奇怪的、不可思议的东西都可以归功于 Scala 的函数特性,因此,简单介绍一下函数语言开发和演变的背景可能非常有用。

在函数语言中,将越来越高级的结构直接构建到语言中是不常见的。此外,语言是通过一组核心原语结构定义的。在与将函数作为对象传递的功能结合之后,可用来定义功能的高阶函数 看起来 像是超出了核心语言的范围,但实际上它只是一个库。类似于任何库,此功能可以替换、扩充或扩展。

根据一组核心原语构建语言的合成 特性由来已久,可以追溯到 20 世纪 60 年代和 70 年代使用 Smalltalk、Lisp 和 Scheme 的时候。诸如 Lisp 和 Sch

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