Scala流程控制语句
本文于2071天之前发表,文中内容可能已经过时。
一、条件表达式if
Scala中的if/else语法结构与Java中的一样,唯一不同的是,Scala中的if表达式是有返回值的。
1 | object ScalaApp extends App { |
在Java中,每行语句都需要使用;
表示结束,但是在Scala中并不需要。除非你在单行语句中写了多行代码。
二、块表达式
在Scala中,可以使用{}
块包含一系列表达式,块中最后一个表达式的值就是块的值。
1 | object ScalaApp extends App { |
如果块中的最后一个表达式没有返回值,则块的返回值是Unit类型。
1 | scala> val result ={ val a = 1 + 1; val b = 2 + 2 } |
三、循环表达式while
Scala和大多数语言一样,支持while
和do ... while
表达式。
1 | object ScalaApp extends App { |
四、循环表达式for
for循环的基本使用如下:
1 | object ScalaApp extends App { |
除了基本使用外,还可以使用yield
关键字从for循环中产生Vector,这称为for推导式。
1 | scala> for (i <- 1 to 10) yield i * 6 |
五、异常处理try
和Java中一样,支持try...catch...finally
语句。
1 | import java.io.{FileNotFoundException, FileReader} |
这里需要注意的是因为finally语句一定会被执行,所以不要在该语句中返回值,否则返回值会被作为整个try语句的返回值,如下:
1 | scala> def g():Int = try return 1 finally return 2 |
六、条件选择表达式match
match类似于java中的switch语句。
1 | object ScalaApp extends App { |
但是与Java中的switch有以下三点不同:
- Scala中的case语句支持任何类型;而Java中case语句仅支持整型、枚举和字符串常量;
- Scala中每个分支语句后面不需要写break,因为在case语句中break是隐含的,默认就有;
- 在Scala中match语句是有返回值的,而Java中switch语句是没有返回值的。如下:
1 | object ScalaApp extends App { |
七、没有break和continue
额外注意一下:Scala中并不支持Java中的break和continue关键字。
八、输入与输出
在Scala中可以使用print、println、printf打印输出,这与Java中是一样的。如果需要从控制台中获取输入,则可以使用StdIn
中定义的各种方法。
1 | val name = StdIn.readLine("Your name: ") |
参考资料
- Martin Odersky . Scala编程(第3版)[M] . 电子工业出版社 . 2018-1-1
- 凯.S.霍斯特曼 . 快学Scala(第2版)[M] . 电子工业出版社 . 2017-7