特點
- 功能強大
- 表達能力強
- 多範式(面向對象和函數式編程)
- 運行在JVM平臺上
- 優雅
- 速度快(開發速度快,運行速度快)
- 能融合到Hadoop 平臺。目前大數據庫系統全部運行在JVM平臺上
- 可以無縫調用java API
- 項目中的核心功能可以使用Scala開發,然後別人調用接口就可以
- Scala 的編譯器可以自動推斷變量類型
- 提供了 Scala shell
HelloScala
/**
* Created by 耀源 on 2016/10/28.
*/
object HelloScala {//object代表這是一個單例對象或者伴生對象
//放置靜態方法,靜態變量,不需要new
def main(args: Array[String]): Unit = {
println("Hello Scala")//
}
}
函數和方法的區別
- 方法 def 定義。返回值可以由編譯器自動推斷,所以可以省略。但是遞歸函數不可以省略。
- 函數定義方式
- 匿名函數
(x : Int,y : Int) => x+y
- 普通函數
var add = (x: Int,y : Int) = > x + y
等價於val add: (Int,Int) => Int = { (a,b)=>a+b }
val func : Int => String = { x => x.toString }
等價於val func = (x: Int) => x.toString
val func = (x: Int,y Double) => (y,x)
返回值超過兩個時可以使用元組的方式返回。val func: (Int,Double) => (Double,Int) = { (a,b) => (b,a)}
- 匿名函數
區別
可以作爲一個值傳到方法裏
var r = 1 to 10 val f1 = (x : Int) = x*10 val f2 = (x : Int) = x+10 r.map(f1) r.map(f2) r.map(_ * 100) // 匿名函數
方法調用函數
val func = (x : Int,y : Int) => x+y def method1(f: (Int,Int) => Int) : Int = { f(2,6) } //放置靜態方法,靜態變量,不需要new def main(args: Array[String]): Unit = { println(method1(func)) }
神奇的下劃線
- 將方法轉換成函數
def method(x: Int,y: Int): Int = x + y
var func = methos _ //將一個方法變成了函數