Scala简介
Scala以JVM为目标环境,将面向对象和函数式编程有机地结合在一起,带来独特的编程体验.
它既有动态语言那样的灵活简洁,同时又保留了静态类型检查带来的安全保障和执行效率,加上其强大的抽象能力,既能处理脚本化的临时任务,又能处理高并发场景下的分布式互联网大数据应用,可谓能缩能伸。
-
Scala源自Java:
Scala构建在JVM之上
Scala与Java兼容、互通 -
Scala的优势:
多范式编程:面向对象编程、函数式编程
表达能力强,代码精简 -
大数据与Scala:
Spark采用Scala语言设计
提供的API更加优雅
基于JVM的语言更融入Hadoop生态圈
Scala交互式编程
Scala解释器读到一个表达式,对它进行求值,将它打印出来,接着再继续读下一个表达式。这个过程被称作“读取一求值一打印”循环(read-eval-print loop),即REPL.
从技术上讲, scala程序并不是一个解释器。实际发生的是,你输入的内容被快速地编译成字节码,然后这段字节码交由Java虚拟机执行。
IDEA中可以输入以下一段内容查看效果:
object HelloWorld {
def main(args:Array[String]):Unit={
println("Hello,World")
}
}
Scala概述
-
面向对象特性:
每个值都是对象
对象的数据类型和行为由类(Class)和特征(Trait,类似于interface)描述
利用特征实现混入式多重继承 -
函数式编程:
每个函数都是一个值
支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配…… -
Scala是静态类型语言
-
扩展性:隐式类、字符串插值
Scala变量与常量
-
变量:在程序运行过程中其值可能发生改变的量,使用关键词 “var” 声明变量
var name = "zhangsan"
-
常量:在程序运行过程中其值不会发生变化的量,使用关键词 “val” 声明常量。
val money = 100
-
使用类型别名定义变量,type关键字
type 类型别名=类型
Scala关键字列表
Scala数据类型(与Java相同)
Scala数据层次类型结构
- Any:所有类型的超类(顶级类型)
- AnyVal:表示值类型的超类
- AnyRef’表示引用类型的超类,对应java.lang.Object
- Unit:表示无值,类似Java中的void
- Nothing:所有类型的子类
- Null:表示null或空引用
(Null有唯一实例null
Nothing没有实例,Nothing为类型系统提供了两种功能:
1.用来当做Nil的类型List[Nothing]
2.Nothing用来表示终止程序,非正常类型的返回值类型)
字符串插值
- s插值器:语序将变量引用,表达式直接插入字面字符中
- f插值器
在任何字符串字面前加上 f,就可以生成简单的格式化串,功能相似于其他语言中的 printf 函数。当使用 f 插值器的时候,所有的变量引用都应当后跟一个printf-style格式的字符串,如%d
- raw插值器
除了对字面值中的字符不做编码外,raw 插值器与 s 插值器在功能上是相同的。