Scala-流程控制

Posted 大数据技术AI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala-流程控制相关的知识,希望对你有一定的参考价值。


Scala-流程控制
Scala-流程控制

Switch


在Scala中没有Switch,而是使用模式匹配来处理。


Scala-流程控制
Scala-流程控制

For 循环控制


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



范围循环方式一




object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 to 3){ println(i) } }}

(1)i 表示循环的变量,<- 规定to

(2)i 将会从 1-3 循环,前后闭合


Scala-流程控制



范围循环方式二




object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 until 3){ println(i) } }}

(1)这种方式和前面的区别在于i是从1到3-1

(2)即使前闭合后开的范围


Scala-流程控制



循环守卫




object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 to 3 if i != 2){ println(i) } }}

(1)循环守卫,即循环保护式(也称条件判断式,守卫)。

(2)保护式为true则进入循环体内部,为false则跳过,类似于continue。

(3)上面的代码等价

object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 to 3 ){ if (i != 2) { println(i) } } }}


Scala-流程控制



循环步长




object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 to 10 by 2){ println(i) } }}

by表示步长


Scala-流程控制



循环嵌套




object ForTest { def main(args: Array[String]): Unit = { for(i <- 1 to 2; j <- 1 to 2) { println(" i =" + i + " j = " + j) } }}

没有关键字,所以范围后一定要加来隔断逻辑


等价于:

object ForTest { def main(args: Array[String]): Unit = { for (i <- 1 to 2) { for (j <- 1 to 2) { println("i =" + i + " j=" + j) } } }}


Scala-流程控制



引入变量




def main(args: Array[String]): Unit = { for(i <- 1 to 3; j = 4 - i) { println("i=" + i + " j=" + j) }}

(1)for推导式一行中有多个表达式时,所以要加;来隔断逻辑

(2)for推导式有一个不成文的约定:

  • 当for推导式仅包含单一表达式时使用圆括号

  • 当包含多个表达式时,一般每行一个表达式,并用花括号代替圆括号

def main(args: Array[String]): Unit = { for { i <- 1 to 3 j = 4 - i } { println("i=" + i + " j=" + j) }}


Scala-流程控制



循环返回值




def main(args: Array[String]): Unit = { val res = for(i <- 1 to 3) yield i println(res)}

将遍历过程中处理的结果返回到一个新Vector集合中,使用yield关键字


Scala-流程控制


Scala-流程控制
Scala-流程控制

While 循环控制


语法:

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

(1)循环条件是返回一个布尔值的表达式

(2)while循环是先判断再执行语句

(3)与if语句不同,while语句没有返回值,即整个while语句的结果是Unit类型()

(4)因为while中没有返回值,所以当要用该语句来计算并返回结果时,就不可避免的使用变量,而变量需要声明在while循环的外部,那么就等同于循环的内部对外部的变量造成了影响,也就违背了函数式编程的重要思想(输入=>函数=>输出,不对外界造成影响),所以不推荐使用,而是推荐使用for循环。

def main(args: Array[String]): Unit = {    var i = 0 while (i < 3) { println( i) i += 1 }}


Scala-流程控制
Scala-流程控制

While 中断


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

  • scala中使用breakable控制结构来实现break和continue功能。


奇数打印,偶数跳过(continue)

def main(args: Array[String]): Unit = { var n = 0 while (n < 10) {      breakable {            n += 1    if (n % 2 != 0) { println(n) } else { break() } } }}


Scala-流程控制


数值为5,结束循环(break)

def main(args: Array[String]): Unit = { var n = 1 breakable { while (n < 10) { println("n=" + n) n += 1 if (n == 5) { break() } } }}



(1)break:breakable放在循环外

(2)continue:breakable放在循环内


以上是关于Scala-流程控制的主要内容,如果未能解决你的问题,请参考以下文章

Scala类型声明与定义函数定义流程控制异常处理

Scala系列|流程控制语句

Scala-流程控制

Scala - 流程控制

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

[原创]Scala学习:流程控制,异常处理