第七章 内建控制结构

Scala中的内建控制结构只有:if, while, for, try, match 和函数调用而已。 之所以没有更高级的内建控制结构,是因为Scala从语法层面上支持函数字面量,可以在基本语法上添加高级的内建控制结构。

  • if表达式

    • 同其他语言的if语法结构类似
    • if是可以返回值的,这里展示一个函数式风格编写的例子:
    val filename = if(!args.isEmpty) args(0); else "default.txt";
  • while循环

    • 与其他语言中的while循环完全一致
    • while和do-while之所以被称为“循环”,而不是表达式,是因为他们不能产生有意义的 结果。其结果类型是Unit
  • for表达式

    • for能做的最简单的事情就是把集合中的所有元素都枚举一遍
    • 例举一个采用发生器语法的例子,file <- filesHere
    val filesHere = (new java.io.File(".")).listsFiles;
    for(file <- filesHere) println(file);
  • 使用 “ 1 to n ” 可以创建Range类型,如果不想包含上边界则可以使用 “ 1 until n ”
  • 守卫,在for中增加if判断条件
val filesHere = (new java.io.File(".")).listsFiles;
for(file <- filesHere if file.getName.endsWith(".scala")) println(file);
  • 还可以在for循环中加入多个 <- 子句
  • 可以进行流间变量绑定,绑定的变量被当作val引入和使用,但不带关键字val
  • 制造新集合,用关键字 yield 使for表达式产生的结果存放在数组中
def scalaFiles = for (file <- filesHere if file.getName.endsWith(".scala")) yield file
  • 使用try表达式处理异常

    1. 抛出异常
      Scala中,throw也是有结果类型的表达式
    val half = 
        if (n % 2 == 0) 
           n / 2;
        else
           throw new RuntimeException("n must be even");
  2. 捕获异常
     Scala选择catch子句这种语法的原因是为了与模式匹配保持一致
    try {
     ...
    }
    catch {
     case ex: ... => ...
     case ex: ... => ...
     case ex: ... => ...
    }
  3. finally子句
     如果需要让某些代码无论如何终止都要执行时,可以将其放在finally子句里
  4. 生成值
     和大多数Scala控制结构一样,try-catch-finally也产生值
  • match表达式

    • 类似其他语言的switch
    • 可以让你使用任意的模式做选择
    • 每个备选项后面并没有break,break是隐含的
  • 不再使用break和continue
  • 变量范围

    • Scala允许在内部范围内创建与外部范围变量同名的变量
    • 脱离所在大括号范围时,变量失效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值