Scala学习随笔——控制语句
Scala只内置了为数不多的几种程序控制语句:if、while、for、try catch以及函数调用,这是因为从Scala诞生开始就包含了函数字面量,Scala内核没有定义过多的控制结构,而是可以通过额外的库来扩展程序的控制结构。
一、if表达式
与其他语言相同,Scala中的if也是选择(分支),与其他的语言不同的是每个表达式都可以返回值。
var age = 25 val result = if(age > 20) "worker" else "student" println(result)
二、while循环
有两种形式, while(......){} 和 do{}while(......)
Scala中while和do-while被成为循环而不是表达式,是因为它们没有返回值,返回Unit或者()
三、for表达式
1.for的一个基本用法与Java相似,可用于枚举集合元素
val filesHere = (new java.io.File(".")).listFiles for(file <- filesHere) println(file)
支持所有类型的集合类型
for(i <- 1 to 4) println(i)
2.过滤
for表达式可以添加一个过滤器——在for的括号内添加一个或多个if语句。
例如,不枚举集合中的每个元素,而是只迭代某些符合条件的元素。
val filesHere = (new java.io.File(".")).listFiles for(file <- filesHere if file.isFile if file.getName.endsWith(".scala")) println(file)
3.嵌套迭代
for表示式支持多重迭代
4.绑定中间变量
5.生成新集合
基本语法 : for clauses yield body ,其中 clauses yield 是关键字
四、用try表达式处理异常
1.抛出异常
抛出异常的方式与Java中相同
val half = if (n % 2 == 0) n/2 else throw new RuntimeException("n must be even")
2.捕获异常
try{}catch{}
3.finally
finally中如果有返回值将会覆盖try中的返回值,所以在finally中应尽量避免使用return
4.生成返回值
五、Match表达式
该表达式支持从多个选择中选取其一执行,类似Java中的switch
true/false布尔表达式 match { case "salt" => println("pepper") case "chips" => println("salsa") case "eggs" => println("bacon") case _ => println("huh?") }
使用中注意以下三点:
- 一是任何类型的常量都可以用在
case
语句中,而不仅仅是int
或是枚举类型。 - 二是每个
case
语句无需使用break
,Scala不支持“fall through
”。 - 三是Scala的缺省匹配为
_
,其作用类似 java 中的default
。
六、Scala中没有提供break和continue,但是可以使用一些方法实现break和continue的功能
var i=0 var foundIt=false while (i < args.length && !foundIt) { if (!args(i).startsWith("-")) { if(args(i).endsWith(".scala")) foundIt=true } i=i+1 }
当然,Scala 在scala.util.control
包中定义了 break
控制结构。它的实现是通过抛出异常给上级调用函数。
import scala.util.control.Breaks._ import java.io._ val in = new BufferedReader(new InputStreamReader(System.in)) breakable { while(true) { println("? ") if(in.readLine()=="") break } }