目录
Scala入门
HelloWorld
创建一个scala工程
创建一个包
创建HelloWorld.scala
编写代码
数据类型
AnyVal类型之间的转换
变量和常量的声明
分支和循环
if…else…
to、until、Range
for循环
while和do…while
Scala入门
官网:https://www.scala-lang.org/
课程版本:2.13.1
HelloWorld
创建一个scala工程
创建一个包
创建HelloWorld.scala
编写代码
object HelloWorld {
def main(args: Array[String]): Unit = {//入口函数
println("HelloWorld")
}
}
数据类型
像java分为基本数据类型和引用类型一样,scala也将数据分为两种类型,分别是值类型和引用类型。不同的是值类型(相当于java中的基本数据类型)有9个,并且都以对象形式存在,可以调用方法。
Any是所有类型的超类型,也称为顶级类型。它定义了一些通用的方法如equals、hashCode和toString。Any有两个直接子类:AnyVal和AnyRef。
AnyVal代表值类型。有9个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是不带任何意义的值类型,它仅有一个实例可以像这样声明:()。所有的函数必须有返回值,所以Unit经常用在没有返回值时的返回值类型的声明(相当于void)。
AnyRef代表引用类型。所有非值类型都被定义为引用类型。在Scala中,每个用户自定义的类型都是AnyRef的子类型。如果Scala被应用在Java的运行环境中,AnyRef相当于java.lang.Object。
AnyVal类型之间的转换
各个类型所占字节长度与java相同。
但是这里数据类型的转换只能单向,比如将Int类型赋值给Long类型,如果逆向转换不能通过编译,比如将Long类型赋值给Int类型。可以转换的方向见上图。
Scala也支持数据类型的强制转换(解决逆向转换需求)例如:
val a:Long = 12345556
val b:Int = a.toInt
变量和常量的声明
Scala中常量用val来定义,表示不可变的量。
用var来定义变量,表示可变,在scala中推荐更多的使用val(有利于回收)。
分支和循环
if…else…
Scala中的if…else…与java中没有不同
var age = 10
if(age>=18){
println("成年人")
}else if(age<=10){
println("儿童")
}else{
println("少年")
}
他可以简写为:
var age = 10
if (age >= 18) println("成年人") else if (age <= 10) println("儿童") else println("少年")
to、until、Range
to:表示左闭右闭的一个范围,eg:1 to 10 => [1,10]
until: 表示左闭右开的一个范围,eg:1 to 10 => [1,9]
Range:从源码来看,to和until底层都是有Range类实现的。
for循环
for(i <- 1 to 10){
println(i)
}
其中to为.to()函数的运算符形式
var a = 1 to (10,2) //第二个参数为步长(每隔几个选定一次) 1,3,5,7,9
var b = 1 until 10 //to 为包含结尾 until 不包含结尾
println(a)
println(b)
for循环练习
多层不同变量循环可以定义在一起,中间用分号隔开
九九乘法表:
for(i<-1 until 10){
for(j<-1 until 10){
if(i>=j){
print(s"$j * $i = "+i*j+"\t")
if(i==j){
println()
}
}
}
}
等价于
for (i <- 1 until 10; j <- 1 until 10) {
if (i >= j) {
print(s"$j * $i = " + i * j + "\t")
if (i == j) {
println()
}
}
}
除了上边说的循环条件可以定义在for之后的()里,还可以定义判断条件,用分号隔开,也可以省略
比如:打印出1到100之间大于50的偶数
for (i <- 1 to 100; if (i > 50); if (i % 2 == 0)) {
println(i)
}
同时for循环也可以得到一个返回值,这里需要通过yield关键字实现
比如:
var vector = for (i <- 1 to 100 if (i > 50) if (i % 2 == 0)) yield i
println(vector)
while和do…while
这个部分也与java相同,我们通过两个简单案例来看一下
var i = 0
while(i<10){
println(i)
i+=1//scala中没有++ --
}
var j = 0
do{
println(j)
j+=1
}while(j<10)
回顾上一节
学习下一节