购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 为什么选择Scala

Scala是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在JVM之上的语言,语法简洁、优雅、灵活。Scala拥有一套复杂的类型系统,Scala方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。这些只是它的一部分特性,下面我们来详细说明。

运行在 JVM JavaScript 之上的语言

Scala不仅利用了JVM的高性能以及最优化性,Java丰富的工具及类库生态系统也为其所用。不过Scala并不是只能运行在JVM之上! Scala.js(http://www.scala-js.org)正在尝试将其迁移到JavaScript世界。

静态类型

在Scala语言中, 静态类型 (static typing)是构建健壮应用系统的一个工具。Scala修正了Java类型系统中的一些缺陷,此外通过类型推演(type inference)也免除了大量的冗余代码。

混合式编程范式——面向对象编程

Scala完全支持 面向对象编程 (OOP)。Scala引入 特征 (trait)改进了Java的对象模型。trait能通过使用 混合结构 (mixin composition)简洁地实现新的类型。在Scala中,一切都是对象,即使是数值类型。

混合式编程范式——函数式编程

Scala完全支持 函数式编程 (FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、被视为一等公民的函数、无副作用的函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。

复杂的类型系统

Scala对Java类型系统进行了扩展,提供了更灵活的泛型以及一些有助于提高代码正确性的改进。通过使用类型推演,Scala编写的代码能够和动态类型语言编写的代码一样精简。

简洁、优雅、灵活的语法

使用Scala之后,Java中冗长的表达式不见了,取而代之的是简洁的Scala方言。Scala提供了一些工具,这些工具可用于构建 领域特定语言 (DSL),以及对用户友好的API接口。

可扩展的架构

使用Scala,你能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。以下四种语言机制有助于提升系统的扩展性:1 )使用trait实现的混合结构;2 )抽象类型成员和泛型;3) 嵌套类;4 )显式 自类型 (self type)。

Scala实际上是Scalable Language的缩写,意为可扩展的语言。Scala的发音为scah-lah,像意大利语中的staircase(楼梯)。也就是说,两个a的发音是一样的。

早在 2001 年,Martin Odersky便开始设计Scala,并在 2004 年 1 月 20 日推出了第一个公开版本(参见http://article.gmane.org/gmane.comp.lang.scala/17)。Martin是瑞士洛桑联邦理工大学(EPFL)计算机与通信科学学院的一名教授。在就读研究生时,Martin便加入了由Niklaus Wirt 领导的PASCAL fame项目组。Martin曾任职于Pizza项目组,Pizza是运行在JVM平台上早期的函数式语言。之后与Haskell语言设计者之一Philip Wadler一起转战GJ。GJ是一个原型系统,最终演变为Java泛型。Martin还曾受雇于Sun公司,编写了javac的参考编译器,这套系统后来演化成了JDK中自带的Java编译器。

1.1.1 富有魅力的Scala

自从本书第1版出版之后,Scala用户数量急剧上升,这也证实了我的观点:Scala适应当前时代。当前我们会遇到很多技术挑战,如大数据、通过并发实现高扩展性、提供高可用并健壮的服务。Scala语法简洁但却富有表现力,能够满足这些技术挑战。在享受Scala最先进的语言特性的同时,你还可以拥有成熟的JVM、库以及生产工具给你带来的便利。

在那些需要努力才能成功的领域里,专家们往往都需要掌握复杂强大的工具和技术。也许掌握这些工具技能需要花费一些时间,但是掌握它们是你事业成功的关键,所以花费这些时间都是值得的。

我确信对于专家级开发者而言,Scala就是这样一门语言。并不是所有的用户都能称得上是专家,而Scala却是属于技术专家的语言。Scala包含丰富的语言特性,具有很好的性能,能够解决多种问题。虽然需要花一些时间才能掌握Scala语言,但是一旦你掌握了它,便不会被它束缚。

1.1.2 关于Java 8

自从Java 5 引入泛型之后,再也没有哪次升级能比Java 8 引入更多的特性了。现在可以使用真正的匿名函数了,我们称之为Lambda。通过本书你将了解到这些匿名函数的巨大作用。Java 8 还改进了接口,允许为声明的方法提供默认实现。这一变化使得我们能够像使用混合结构那样使用接口,这也使接口变得更有用了,而Scala则是通过trait实现这种用法的。在Java 8 推出之前,Scala便已为Java提供了这两个被公认为Java 8 最重要的新特性。现在是不是能说服自己切换到Scala了?

由于Java语言向后兼容的缘故,Scala新增了一些改进,而Java也许永远不会包含。即便Java最终会拥有这些改进,那也需要漫长的等待。举例来说,较Java而言,Scala能提供更为强大的类型推演、强大的 模式匹配 (pattern matching)和for 推导式 (forcomprehension),善用模式匹配和for推导式能够极大地减少代码量以及类型耦合。随着深入学习,你会发现这些特性的巨大价值。

另外,一些组织对升级JVM设施抱有谨慎态度,这是可以理解的。对于他们而言,目前并不允许部署Java 8 虚拟机。为了使用这些Java 8 特性,这些组织可以在Java 6 或Java 7的虚拟机上运行Scala。

你也许因为当前使用Java 8,就认为Java 8 是最适合团队的选择。即便如此,本书仍然能给你传授一些有用的技术,而且这些技术可以运用在Java 8 中。不过,我认为Scala具有一些额外的特性,能够让你觉得值得为之改变。

好吧,让我们开始吧! BjJ5GQURSDXPLbp4EDTIvtFVcXFnaEVVkFpVnOABVbazpcnyfjzXEJA9P91wz9kv

点击中间区域
呼出菜单
上一章
目录
下一章
×