《Programming Scala》:Scala 的特性
January 27th, 2010
2 comments
本文是《Programming Scala》第一章的笔记,Scala 是一门很有趣也很简练的语言。
Scala为并行,简洁,可伸缩性而设计,它是一种函数式和面向对象的混合式语言,提供了基于actor的消息传递模型以去除并行带来的复杂性。使用这个模型,可以编写简洁的多线程代码(synchoroize关键字可以从词汇中消除了),而不用担心线程之间的数据连接以及处理锁和释放所带来的问题。
然而Scala也能用来编写单线程的应用程序,或者作为多线程应用的单线程模块,它的函数式风格有利于单线程和多线程的应用。Scala的并行模型与Erlang的风格很相似,但Scala的优点是:它是强类型而Erlang是弱类型,能在JVM上运行,与Java很好的进行交互。
下图展示了Scala在企业应用中适合的地方:
注意到,可以将Java代码包装在Scala的actor库中提供线程的隔离,如果要在线程之间通讯,则使用Scala轻量级API来传递信息。在Scala中不用在创建线程时马上用同步来限制其并行,而是在不使用锁的情况下进行真正的并行操作,这就能更关注应用逻辑而不是低层次的线程。
Scala是静态类型的,但与Java 不同的是,不必明确反复地指定类型,很多情况下编译器可以进行类型推断,这一特性在简化函数的参数和返回值时很有用。
Scala的内核是很小的,其它包含操作符,Actor,都仅仅只是Scala库的一部份,可扩展性是极强,完全可以自行写一个实现。函数式编程是一种声明式的风格,在这种风格中指明的是“做什么”而不是“应该怎样做”,在XSLT,规则引擎,或者ANTLR中使用的就是函数式风格。
在一个数组中寻找最大值的函数式编程如下:
def findMax(temperatures : List[Int]) = {
temperatures.foldLeft(Integer.MIN_VALUE) {
Math.max
}
}
将列表中的每个元素乘以2:
val values = List(1, 2, 3, 4, 5) val doubleValues = values.map( _ * 2)
计算一个数的阶乘:
def fact(n: Int) = 1 to n reduceLeft (_*_)

评论