特点
- 功能强大
- 表达能力强
- 多范式(面向对象和函数式编程)
- 运行在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 _ //将一个方法变成了函数