Scala编程语言近来抓住了很多开发者的眼球如果你粗略浏览Scala的网站你会觉得Scala是一种纯粹的面向对象编程语言而又无缝地结合了命令式和函数式的编程风格Christopher Diggins认为 不太久之前编程语言还可以毫无疑义地归类成命令式或者函数式Scala代表了一个新的语言品种它抹平了这些人为划分的界限 根据David Rupp在博客中的说法Scala可能是下下一代Java这么高的评价让人不禁想看看它到底是什么东西 Scala有几项关键特性表明了它的面向对象的本质例如Scala中的每个值都是一个对象包括基本数据类型(即布尔值数字等)在内连函数也是对象另外类可以被子类化而且Scala还提供了基于mixin的组合(mixinbased composition) 与只支持单继承的语言相比Scala具有更广泛意义上的类重用Scala允许定义新类的时候重用一个类中新增的成员定义(即相较于其父类的差异之处)Scala称之为mixin类组合 Scala还包含了若干函数式语言的关键概念包括高阶函数(HigherOrder Function)局部套用(Currying)嵌套函数(Nested Function)序列解读(Sequence Comprehensions)等等 Scala是静态类型的这就允许它提供泛型类内部类甚至多态方法(Polymorphic Method)另外值得一提的是Scala被特意设计成能够与Java和NET互操作Scala当前版本还不能在NET上运行(虽然上一版可以)但按照计划将来可以在NET上运行 Scala可以与Java互操作它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)你可以从Scala中调用所有的Java类库也同样可以从Java应用程序中调用Scala的代码用David Rupp的话来说 它也可以访问现存的数之不尽的Java类库这让(潜在地)迁移到Scala更加容易 这让Scala得以使用为Java或者编写的巨量的Java类库和框架Scala会经常性地针对这几个版本的Java进行测试Scala可能也可以在更早版本的Java上运行但没有经过正式的测试Scala以BSD许可发布并且数年前就已经被认为相当稳定了 说了这么多我们还没有回答一个问题为什么我要使用Scala?Scala的设计始终贯穿着一个理念 创造一种更好地支持组件的语言(《The Scala Programming Language》Donna Malayeri) 也就是说软件应该由可重用的部件构造而成Scala旨在提供一种编程语言能够统一和一般化分别来自面向对象和函数式两种不同风格的关键概念 藉着这个目标与设计Scala得以提供一些出众的特性包括 * 面向对象风格 * 函数式风格 * 更高层的并发模型 Scala把Erlang风格的基于actor的并发带进了JVM开发者现在可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序它会自动获得多核心处理器带来的优势而不必依照复杂的Java线程模型来编写程序 * 轻量级的函数语法 o 高阶 o 嵌套 o 局部套用(Currying) o 匿名 * 与XML集成 o 可在Scala程序中直接书写XML o 可将XML转换成Scala类 * 与Java无缝地互操作 Scala的风格和特性已经吸引了大量的开发者比如Debasish Ghosh就觉得 我已经把玩了Scala好一阵子可以说我绝对享受这个语言的创新之处 总而言之Scala是一种函数式面向对象语言它融汇了许多前所未有的特性而同时又运行于JVM之上随着开发者对Scala的兴趣日增以及越来越多的工具支持无疑Scala语言将成为你手上一件必不可少的工具 |