Scala 速通语法(二)| 流程控制

流程控制


分支控制

Scala 中任意表达式都是有返回值的,也就意味着 if else 表达式其实是有返回结果的,具体返回结果的值取决于满足条件的代码体的最后一行内容

  • if-else简单类比Java
  • 嵌套分支 多层if-else嵌套 但最好不要超过 3 层

  • for 循环 重点 也称为 for 推导式(for comprehension)或for 表达式(for expression)
    // i 表示循环的变量, <- 规定好to 规定
    // i 将会从1-3 循环, 前后闭合
    for(i <- 1 to 3){
      print(i + " ")
    }
    
    // 这种方式和前面的区别在于 i 是从 1 到 3-1
    // 前闭合后开的范围,和 java 的 arr.length() 类似
    for(i <- 1 until 3) {
      print(i + " ")
    }
    
    //循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true 则进入循环体内部,为false则跳过,类似于continue
    for(i <- 1 to 3 if i != 2) {
      print(i + " ")
    }
    //上面代码等价于
    for (i <- 1 to 3) {
      if (i != 2) {
        println(i+" ")
      }
    }
    

  • 嵌套循环
//没有关键字,所以范围后一定要加;来隔断逻辑
for(i <- 1 to 3; j <- 1 to 3){
  println(" i =" + i + " j = " + j)
}

  • 循环返回值
val res = for(i <- 1 to 10) yield i
println(res)

  • 使用花括号{}代替小括号()
for(i <- 1 to 3; j = i * 2) {
   println(" i= " + i + " j= " + j)
}

//可以写成
for{
  i <- 1 to 3 
  j = i * 2} {
  println(" i= " + i + " j= " + j)
}

  • for 推导式有一个不成文的约定:当 for 推导式仅包含单一表达式时使用圆括号,当其包含多个表达式时使用大括号
  • 当使用{} 来换行写表达式时,分号就不用写了

  • while 循环控制
    • 基本语法
      循环变量初始化
      while (循环条件) {
      循环体(语句)
      循环变量迭代
      }
  //1. 定义循环变量
  var i = 0
  //2. i < 10 条件
  while (i < 10){
    println("hello" + i) //循环体
    //循环变量迭代
    i += 1
  }
  //与 If 语句不同,While 语句本身没有值,即整个 While 语句的结果是 Unit 类型的()
  • 因为 while 中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量 ,而变量需要声明在 while 循环的外部,那么就等同于循环的内部对外部的变量造成了影响,所以不推荐使用,而是推荐使用 for 循环

  • do - while 循环
//do{
//循环体(语句)
//循环变量迭代
//} while(循环条件)
  var i = 0 // for
    do {
      printf(i + "hello\n" )
      i += 1
    } while (i < 10)
  }
posted @ 2021-05-19 17:52  —清风碎心—  阅读(44)  评论(0编辑  收藏  举报