02_Scala_流程控制

举报
alexsully 发表于 2021/04/30 12:36:57 2021/04/30
【摘要】 顺序控制 上到下逐行地执行 分支控制 if elif  else 循环控制 for while 

顺序控制 上到下逐行地执行,中间没有任何判断和跳转
分支控制 if elif  else
循环控制 for while 

分支控制if-else - 单分支/双分支/多分支

for循环控制  for 循环的特性被称为for 推导式(for comprehension)或for 表达式(for expression)
循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue
循环返回值 yield
控制步长 Range 

 while循环控制
  循环变量初始化
while (循环条件) {
           循环体(语句)
            循环变量迭代
}

while不推荐,外部定义变量,内部使用且对外部变量 有影响 
循环条件:返回一个布尔值的表达式
while循环: 先判断再执行语句
整个While语句的结果是Unit类型的()

while循环的break &  continue实现
Scala 中break 有抛异常,用 break{} 函数带了处理异常的能力
Scala中实现 continue 用到了 循环守卫 

object ForWhileTest {
  def main(args: Array[String]): Unit = {
    // 1 to 3  包括3  // 循环守卫 循环 +  if 判断
    for(i <- 1 to 3 if i != 2) {
//      print(i + " ")
    }

    // 1 until 3  不包括 3
    for(i <- 1 until 3) {println(i)}

    // 控制步长
    for (i <- Range(1,10,2)){
//      println(i)
    }

//将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字
    val res = for(i <- 1 to 10) yield i
//    println(res)

// while 循环
    var i = 0
    //2. i < 10 条件
    while (i < 5){
      println("hello,alex" + i) //循环体
      //循环变量迭代
      i += 1
    }

    //breakable()函数  实现break 操作
    //说明
    //1. breakable 是一个高阶函数:可以接收函数的函数就是高阶函数(后面详解)
    //2. def breakable(op: => Unit) {
    //    try {
    //      op
    //    } catch {
    //      case ex: BreakControl =>
    //        if (ex ne breakException) throw ex
    //    }
    //  }
    // (1) op: => Unit 表示接收的参数是一个没有输入,也没有返回值的函数
    // (2) 即可以简单理解可以接收一段代码块
    // 3. breakable 对break()抛出的异常做了处理,代码就继续执行
    // 4. 当我们传入的是代码块,scala程序员会将() 改成{}

    var n = 1
    breakable {
      while (n <= 5) {
        n += 1
        println("n=" + n)
        if (n == 2) {
          //中断while
          //说明
          //1. 在scala中使用函数式的break函数中断循环
          //2. def break(): Nothing = { throw breakException }
          break()
        }}}

    // 实现 continue 功能
    // 循环守卫 if (i != 2 && i != 3) 这个条件为ture,才执行循环体
    // 即当i ==2 或者 i == 3时,就跳过
    for (i <- 1 to 10 if (i != 2 && i != 3)) {
      println("i=" + i)
    }
 }}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。