Chapter 07 《Built-in Control Str
2018-06-12 本文已影响0人
liqing151
-
Scala
中的内建控制结构非常少,只有if,while,for,try,match
和函数调用。得益于Scala
将函数作为一等公民,可以将更高级的控制结构使用类库实现,而不是在基础语法中不断地添加高级控制结构。
-
- 控制结构中的
if,for,try,match
都能返回一个值,while
是循环,而不是表达式,因为while
并不返回某个值。while
循环要对程序产生作用的话就必须修改var
变量或者进行I/O
操作,因此一般不是很建议使用while
循环。
- 控制结构中的
- 赋值语句的结果是
Unit
。
- 赋值语句的结果是
for
表达式
-
for
表达式的语法可以被用于各种各样的集合,而不仅仅是在数组中。line <- lines
被成为生成器。
-
- 用于遍历,很少使用数字下标的方式,因为for表达式可以直接遍历访问集合。
- 用于过滤,是for表达式中的一个if字句,可以使用多个if条件完成过滤。
for ( file <- filesHere if file.isFile if file.getName.endsWith(".scala") ) println(file)
- 嵌套循环:使用多个
<-
生成器,则会得到嵌套循环。
- 嵌套循环:使用多个
- 产出一个新的集合:用
yield
关键字,在for
语句执行完毕之后,得到最终的结果。
- 产出一个新的集合:用
使用try
来处理异常
- 和
Java
是类似的,如果抛出了异常,就不能够再继续运行程序。可以在最后使用finally
保证资源被关闭了。
- 和
-
i
f中的两个分支,一个有返回类型;一个抛出异常完全是可以的。因为抛出异常的返回值为Nothing
,是所有类型的子类。
-
-
try-catch-finally
最后会交出一个值,这个值的类型是try
和catch
表达式返回类型的最近祖先。如果finally
字句中没有return
关键字,该语句的值会被丢弃。如果是有的话,会替代try
和finally
的值。推荐的是不替代,否则会使程序员迷茫。而且在finally
中不推荐做这样的操作,只处理一些资源关闭的动作之类的。
-
match
- 用于
match
的表达式可以是任意的表达式,而且match
表达式有返回语句。