开发环境配置
scala下载:https://www.scala-lang.org/download/
解压安装后配置环境变量即可(因为scala需要运行在JVM上,所以需要有JDK环境)
windows配置完成后,在命令行输入scala -version可以出现如下提示,说明配置完成
Linux系统配置步骤相同
配置完成后,要使用IDEA开发scala需要下载scala插件
点击Flie->Settings->Plugins,在搜索框中搜索scala,下载对应插件
插件下载完成后,在新建项目时,就可以选择scala选项创建项目了,创建项目时选择IDEA
在创建MAVEN项目时,需要额外增加scala支持,右键项目目录,选择Add Framework Support,在弹出窗口中选择scala
配置完成后,可以创建一个scala文件,运行一个简单的程序
object HelloScala {
def main(args: Array[String]): Unit = {
println("Hello Scala")
}
}
变量和数据类型
- Any:所有类的超类(类似于JAVA中的Object,区别在于Any同时是基本类型的超类)
- AnyVal:表示值类型的超类
- AnyRef:表示引用类型的超类
- Unit:空的值类型
- Null:空的引用类型
- Nothing:所有类的子类
scala中的基本数据类型和java基本一致,只是变量字母需要首字母大写
数据类型 | 描述 |
---|---|
Byte | 8位有符号整数 |
Short | 16位有符号整数 |
Int | 32位有符号整数 |
Long | 64位有符号整数 |
Float | 32位单精度浮点数 |
Double | 64位双精度浮点数 |
Char | 16位无符号Unicode字符 |
Boolean | 布尔值,true或false |
字符串插值器
- s插值器
val name = "zhangsan"
val height = 1.83
println(s"姓名:$name 身高:$height")
类似于shell中的变量调用,在输出字符串前标记s,可以在字符串中用${变量名}的形式访问变量的值
- f插值器
println(f"姓名:$name%s 身高:$height%6.3f")
输出字符串前标记为f,可以在变量名后增加限制,%s为字符串,%d为整形数值,%f为浮点型数值,f前的数值,小数点后的数字表示输出的数值小数点后的位数,小数点前的数值表示输出的数值的总位数(包括小数点),若输出位数大于或等于限制位数则原样输出,否则将在前面补加空格
- raw插值器
println("abc\r\ndef")
println(raw"abc\r\ndef")
在输出字符串前添加标记raw,表示不解析字符串中的特殊字符,输出结果:
程序流程控制
条件判断
条件判断语句和java相同
if (condition1){
branch1
}else if (condition2){
branch2
}...
else{
branchN
}
注意:
- scala中可以不使用return关键字,一个代码块中能够运行到的最后一行代码会自动被作为返回值返回
- scala中不支持三目运算,取而代之使用if-else条件判断,最终取值为if-else结构中能够运行到的最后一行代码
- scala不支持switch操作,而是使用模式匹配(match…case)语法,功能要比switch更强大
循环结构
scala也有for、while和do…while三种循环结构
for循环
for (i <- 1 to 3){//i取值从1到3
print(i+" ")
}
for(i <- 1 until 3){//i取值从1到2
print(i+" ")
}
可以在循环后面添加限制条件,只有当条件满足时才可以执行循环体,这些条件称为循环守卫
for (i <- 1 to 20 if i!=10){
println(i)
}
可以同时设置多个条件,使用;
分隔,满足全部条件时才可以执行循环体
for (i <- 1 to 20 if i != 10; if i % 3 == 0) {
println(i)
}
也可以在for循环位置设置变量
for (i <- 1 to 20 if i != 10; if i % 3 == 0; j = 13) {
println(i + j)
}
循环步长
循环结构中的1 to 20实际上是从1到20的集合,对于所有包含多个元素的对象(包括所有集合、元组甚至字符串),都可以作为for循环的取值范围
当取值范围内的元素是数值类型时(包括整形和浮点型),都可以在定义范围后,在后面添加by 步长
后缀定义取值的步长
for (i<-1 to 20 by 3){
println(i)
}
运行结果
需要注意,当取值范围内的元素为整型数值时,步长不可以定义为浮点型数值
步长可以取负值,此时就代表从数值较大一方开始向数值较小一方移动,取值范围需要对应调整
for (i<-20 to 1 by -3){
println(i)
}
输出结果:
while和do…while循环和java语法相同,不多做解释
循环终止
需要引入Breaks,并将需要终止的循环放在breakable代码块中
//scala导包语句可以放在任意位置,但仅在导包以后位置生效
import scala.util.control.Breaks._
breakable(
for (i <- 1 to 20) {
if (i == 14) {
break()
}
println(i)
}
)