主要内容
为什么用Scala
特性
与java使用上的不同
缺点
为什么用Scala
Scala是为并发、表达性和可扩展性而设计的。
函数式的语言
强类型
静态编译
基于JVM
Actor模型
可以当脚本语言
简洁的语法
简洁的语法
点和括号可选
Eg: 1.to(3)等价于1 to 3
原始字符串
Eg: ”””a phase, raw string”””
分号可选
Eg: print(”a line”)
类声明
Eg: class Book(val name:String, var price:Int) {}
数组循环
Eg: (1 to 3).foreach{ i => print(i) }
多重循环
Eg: for(i <-1 to 3; j <-2 to 6){}
循环过滤
Eg: for(i <-1 to 10 if i > 5; if i %2 == 0){}
符号语法
Eg: /:就是foldLeft
:结尾是目标在运算符后面
Eg: newList:::list
函数式语言
声明式风格
Eg: (1 to 3).map(_ * 2)
高密度的表达式
Eg1: (0 /: (1 to 10)){ _ + _ }
Eg2: (1 to 10).foldLeft(0){ (sum, elem) => elem + sum }
函数作为参数
Eg: def loopThrough( n:Int )( closure:Int => Unit ){
for( i ← 1 to n ) { closure(i) }
}
loopThrough(5) { 2 * _ }
Curry化
Eg: f(arg1)(arg2) == f(arg1){arg2} == f{arg1}{arg2}
Trait和类型
类型
1. var与val
2. 类型推演(Any, Option, Nothing, 具体类型)
Trait
eg: trait Friend{}
class Human( … ) extends Friend
class Dog( … ) extends Animal with Friend with ...
new Cat( … ) with Friend
Collection
实用的方法:filter(), ++(), **(), map(), foreach(), /:, ::, forall(), exists(), toXXX, mkString()
模式匹配
Eg: def process(input:Any){
val regex = ”””a(\w+)”””.r
input match {
case (a, b) => …
case msg:Double => …
case msg:Int if (msg > 100) => …
case regex(msg) => ...
case _ => ...
}
}
并发编程
receive, receiveWithin
react, reactWithin
Eg: val accumulator = actor {
loop {
reactWithin(50) {
case number: Int =>
println(number)
sum(number)
case timeout =>
caller ! "end"
println("timeout")
}
println("won't print")
}
}
其他特性
与java互操作不错
可以只捕捉关心的异常
XML可以直接操作
简化的基本类库,比如Source.fromFile()
缺点
启动速度慢
Java调用Scala有些地方会有问题
写代码的思路需要转变
IDE支持还有待改进
语法有些不一样,需要学习
本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/432275,如需转载请自行联系原作者