面向Java开辟人员的Scala指南 - Scala掌握构造内部揭密[Java编程]
本文“面向Java开辟人员的Scala指南 - Scala掌握构造内部揭密[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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 和 Scheme 之类的语言因为它们在更初级别的抽象上定义更高级别抽象的本领而遭到人们的狂热追捧.编程人员可以利用高级抽象,用它们构建更高级的抽象.目前听到谈论这个历程时,它普通是关于特定于域的语言(或 DSL)的(请参阅 参考资料).实际上,它只是关于如安在抽象之上构建抽象的历程.
在 Java 语言中,惟一挑选就是操纵 API 调用完成此操作;在 Scala 中,可以通过扩大语言本身实现它.试图扩大 Java 语言会带来成立极度场景(corner case)的风险,这些场景将威胁全局的安定性.而试图扩大 Scala 则只意味着成立一个新库.
以上是“面向Java开辟人员的Scala指南 - Scala掌握构造内部揭密[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |