Scala中的流程控制

一、分支控制if-else

//Scala中if-else语句中,代码块内最后一句代码就是返回值
def main(args: Array[String]): Unit = {
   var age:Int = 18;
   if (age > 18){
     "成年了"
   }else{
     "未成年"
   }
  }

注意:Scala中没有三元运算符,由if-else替代了。

二、分支控制Switch

Scala中没有switch语句,而是使用模式匹配来代替。

模式匹配:一个模式匹配包含了一系列备选项,每个备选项都开始于关键字case。每个备选项都包含一个模式及一到多个表达式。箭头符号“=>”来隔离模式和表达式。

object Test {
   def main(args: Array[String]) {
      println(matchTest(3))

   }
   def matchTest(x: Int): String = x match {
      case 1 => "one"
      case 2 => "two"
    //类似于switch中的default,case _是全匹配。 case _ => "many" } }
输出:many

match表达式还可以有不同数据类型的模式匹配,当发现一个匹配的模式后就不会继续往下匹配了。

def matchTest(x: Any): Any = x match {
      case 1 => "one"
      case "two" => 2
      case y: Int => "scala.Int"
      case _ => "many"
   }

三、for循环控制

Scala也为for循环这一常见的控制结构提供了非常多的特性,这些for循环的特性被称为for推导式或for表达式。 

1、范围数据循环(to):闭区间

 for (i <- 1 to 3){
      print(i+" ")
    }
    println()

i:循环变量;

<-:规定;

1 to 3:1到3闭合区间;

2、范围数据循环(until):左闭右开区间

for (i <- 1 until 5){
      print(i+" ")
    }
    println()

3、循环守卫

循环守卫,即循环保护式(也称条件判断式,守卫)。保护式为true则进入循环体内部,为false则跳过,类似于continue。

    for (i <- 1 to 3 if i != 2){
      print(i+" ")
    }
    println()

等价于

 for (i <- 1 to 3){
      if(i != 2){
        print(i+" ")
      }
    }
    println()

4、循环步长

 for (i <- 1 to 10 by(2)){
      print(i+" ")
    }
    println()

输出:1 3 5 7 9 

:by表示步长

5、嵌套循环

for推导式中有多个表达式时需要用分号“;”来隔断逻辑。当for循环中包含多个表达式时可以使用{}包含。

for (i <- 1 to 3;j <- 2 to 4){
      println(i+" "+j)
    }

输出:
1 2
1 3
1 4
2 2
2 3
2 4
3 2
3 3
3 4

6、引入变量循环

for (i <- 1 to 3;j = i-2){
      println(i+" "+j)
    }

输出:
1 -1
2 0
3 1

相当于:
   for (i <- 1 to 3){
      var j:Int = i-2
      println(i+" "+j)
    }

7、循环返回值

// yield后面也可以跟表达式,例如{i*2}
var res = for (i <- 1 to 3) yield i println(res) 输出: Vector(1, 2, 3)

注意:这种方式在实际开发中很少使用。

8、倒序打印

for (i <- 1 to 4 reverse){
      print(i + " ")
    }
输出:
4 3 2 1 

四、While循环

Scala中的while循环用法于Java一致。

五、循环中断

Scala内置控制结构特地去掉了break和continue,是为了更好的适应函数式编程,推荐使用函数式的风格解决break和continue的功能,而不是一个关键字。Scala中使用breakable控制结构来实现break和continue功能。 

1、异常中断

def main(args: Array[String]): Unit = {
    try{
      for (i <- 1 to 10){
        print(i + " ")
        if (i== 5) throw new RuntimeException
      }
    }catch {
      case e =>
    }
    println("正常循环结束")
  }

2、使用Scala自带的函数退出

import scala.util.control.Breaks._

def main(args: Array[String]): Unit = {
    breakable(
      for (i <- 1 to 10){
        print(i)
      //break省略了()
if (i == 5)break } ) }

 

posted @ 2022-02-11 18:15  干了这瓶老干妈  阅读(54)  评论(0编辑  收藏  举报
Live2D