Scala 內建控制结构

Scala 內建控制结构

需要注意的是,大多数的 Scala 控制结构,都会返回一个结果值。也就是说,大多数的控制结构都是表达式级别的存在

IF 表达式

这个是最基础的控制结构

WHILE 循环

while 循环 或者 do-while 循环,它们只能称之为循环(loop),因为它们不能返回一个有意义的值,它们只能返回Unit

Scala 中的赋值语句,总是返回Unit,有些在 java 中的惯用法,在 Scala 中使用需要小心

var line = ""
while ((line = readLine()) != "") {
// ...
}

// line = readLine() 的结果是 Unit,所以 while 中的条件表达式永远为 true

FOR 表达式

For 表达式,在 Scala 中被称为迭代器的瑞士军刀。通过简单的组合来表达丰富的迭代

遍历集合

通过 for 表达式,能够遍历集合、数组以及任何实现了Traversable特质的类

var files = new File(".").listFiles()

for (file <- files) println(file.getName)

过滤

如果你不想遍历一个集合的整体,而是想要过滤出它的部分子集,你可以为这个 for 表达式加上一个filter

for (file <- files if file.getName.endsWith(".scala")) println(file)

上述的 for 只是应用了它的副作用(side-effects),返回的结果为 Unit
如果一个 for 表达式能够被称之为表达式(expression),是因为它可以产出一个特定的结果

内嵌迭代

使用多个 <- Clauses,就可以获得内嵌迭代

中流(Mid-Stream)变量绑定

对于 for 表达式中可能会进行多次的变量运算,可以抽取出来,形成中流变量,从而避免部分的性能开销

产出(yield)新的集合

for clause yield body

yield关键字要放置在 body 之前,即便 body 是用花括号(curly)括起来,也要放在左花括号之前

异常处理以及 Try 表达式

和其他语言不同的地方是,Scala 的异常含有一个返回结果类型:Nothing
catch clauses 可以使用模式匹配(pattern matching)
Scala 不需要你必须 catch 那些 checked exception 或者声明它们在一个 throws clause 当中
finally clause 中的计算值会被丢弃掉。通常 finally clause 执行的是某种意义上的清洗(clean up),而不应该改变主体中的计算值

匹配表达式(Matching expression)

匹配表达式是 Scala 中的一个强大的功能,它比 Java 中的 swtich 受限较少,可以匹配任何类型,使用语法如下:
不会出现穿透情况(fall-through)的发生,使得代码更加的安全可靠

val foo = "xx"
val bar = foo match {
    case "xx" => "I am foo"
    case _ => "huh?"
}
println(bar)

在模式匹配中,对于常量,Scala 默认认为首字母为大写的变量为常量

没有 Break & Continue

因为 Scala 更加倾向于函数式的编程设计,所以取消了 Break & Continue

如果你就是想要使用,那么可以参考如下示例:

import scala.util.control.Breaks._
import java.io._

val in = new BufferedReader(new InputStreamReader(System.in))
breakable {
    while (true) {
        println("? ")
        if (in.readLine() == "") break
    }
}    

变量的作用域(Scope)

Scala 的变量作用域和 Java 大体是一致的,但是有一点不同,那就是在内嵌(nested)的作用域中,可以命名同样的变量,叫做外部的影子(shadow)变量

建议

通常在内嵌的作用域中使用新的、有意义的名称来命名变量,而不是使用外部的影子变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GettingReal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值