且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Scala简介

更新时间:2022-10-03 22:47:28

主要内容

为什么用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,如需转载请自行联系原作者