← 返回首页
Scala中的表达式和循环
发表时间:2023-09-06 08:36:01
Scala中的表达式和循环

Scala中的表达式和循环。

1.if表达式

在Scala中,if表达式是有返回值的,就是if或者else中最后一行语句返回的值,这一点和java中的if是不一样的,java中的if表达式是没有返回值的。

scala> val age = 20
age: Int = 20

scala> if(age > 18) 1 else 0
res9: Int = 1

#因为if表达式是有返回值的,所以可以将if表达式赋予一个变量。

scala> val res = if(age > 18) 1 else 0
res: Int = 1

由于if表达式是有值的,而if和else子句的值的类型可能还不一样,此时if表达式的值是什么类型呢? 注意:Scala会自动进行推断,取两个类型的公共父类型。

例如,if(age > 18) 1 else 0,表达式的类型是Int,因为1和0都是Int 例如,if(age > 18) “old” else 0,此时if和else的值分别是String和Int,则表达式的值是Any类型,Any是String和Int的公共父类型。

scala> if(age > 18) 1 else 0
res12: Int = 1

scala> if(age > 18) "old" else 0
res13: Any = old

如果if后面没有跟else,则默认else的值是Unit,也可以用()表示,类似于java中的void或者null 例如,val age = 12; if(age > 18) “old”。此时就相当于if(age > 18) “old” else ()。 此时表达式的值是Any。

scala> if(age > 18) "old" else ()
res17: Any = ()

如果想在scala REPL中执行多行代码,该如何操作?使用:paste和ctrl+D的方式 :paste 表示代码块的开始 ctrl+D 表示代码块的结束

scala> :paste
// Entering paste mode (ctrl-D to finish)

val age = 20
if(age > 18)
1
else
0

// Exiting paste mode, now interpreting.
age: Int = 20
res18: Int = 1

2.语句终结符

Scala默认不需要语句终结符,它将每一行作为一个语句。如果一行要放多条语句,则前面的语句必须使用语句终结符,语句终结符和Java中的一样,就是我们平时使用的分号。

scala> val age = 20; if(age > 18) 1 else 0
age: Int = 20
res0: Int = 1

3.循环

1).print和println

在讲循环之前,先来看一下打印命令print和println print打印时不会加换行符,而println打印时会加一个换行符,这个特性和Java中的打印语句的特性是一样的。

2).for

for循环本身的特性就没什么好说的了,直接上案例,主要注意一下scala中的for和java中的for在语法层面的区别。

scala> :paste
// Entering paste mode (ctrl-D to finish)

val n = 10
for(i <- 1 to n)
println(i)

// Exiting paste mode, now interpreting.

1
2
3
4
5
6
7
8
9
10
n: Int = 10

这里面的to可以换成until

scala> :paste
// Entering paste mode (ctrl-D to finish)

val n = 10
for(i <- 1 until 10)
println(i)

// Exiting paste mode, now interpreting.

1
2
3
4
5
6
7
8
9
n: Int = 10

对比两次执行的结果发现: to 和 until 其实都是函数,一个是闭区间,一个是开区间。 1 to 10 可以获取1~10之间的所有数字 1 until 10可以获取1~9之间的所有数字

for循环针对字符串还可以用

scala> for(c <- "hello scala") println(c)
h
e
l
l
o

s
c
a
l
a

注意:在这里我在for循环后面没有使用花括号,都省略了,主要是因为for循环的循环体代码就只有一行,如果有多行,就需要使用花括号了,这和Java和C其它高级语言是一样的。

scala> :paste
// Entering paste mode (ctrl-D to finish)

for(i <- 1 to 5)
{
println(i)
println("hello")
}

// Exiting paste mode, now interpreting.

1
hello
2
hello
3
hello
4
hello
5
hello

3).while

while循环,它的用法和java中的while也是很像的,主要看一下语法层面的区别。

scala> :paste
// Entering paste mode (ctrl-D to finish)

var n = 10
while(n>0){
println(n)
n -= 1
}

// Exiting paste mode, now interpreting.

10
9
8
7
6
5
4
3
2
1
n: Int = 0