一、分支控制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
}
)
}

Scala中的流程控制的更多相关文章

  1. Java中的流程控制(三)

    关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...

  2. Python基础之:Python中的流程控制

    目录 简介 while语句 if 语句 for语句 Break Continue pass 简介 流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样 ...

  3. python中的流程控制

    目录 引言 流程控制的分类 分支结构 单if结构 if与else结构 if与elif与else结构 if分支的嵌套 循环结构 while循环 while + break循环 while + conti ...

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

    1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...

  5. C中的流程控制

    一. 流程控制 l 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. l 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. l 循环结构:在给定条件成立的情况下,反复执行某一 ...

  6. Java中的流程控制(二)

    关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...

  7. Java中的流程控制(一)

    程序的流程控制(一) 关于Java程序的流程控制(一) 从结构化程序设计角度出发,程序有三种结构: 顺序结构 选择结构 循环结构 1.顺序结构 就是程序从上到下一行行执行,中间没有判断和跳转. 2.i ...

  8. Java中的流程控制

    1.Java中有几种流程控制?分别是什么? 答:有三种流程控制,分别是顺序流程,分支流程和循环流程 2.分支语句if/else有哪三种形式?分别如何使用? 答:if/if-else-/if-else ...

  9. 在NodeJS中使用流程控制工具Async

    本文介绍一款流程控制工具async,在编写接口或者编写测试用例的过程中总是会用到它. 由于nodejs是异步编程模型,有一些在同步编程中很容易做到的事情,现在却变得很麻烦.Async的流程控制就是为了 ...

随机推荐

  1. 图像数据到网格数据-1——Marching Cubes算法的一种实现

    概述 之前的博文已经完整的介绍了三维图像数据和三角形网格数据.在实际应用中,利用遥感硬件或者各种探测仪器,可以获得表征现实世界中物体的三维图像.比如利用CT机扫描人体得到人体断层扫描图像,就是一个表征 ...

  2. EasySharding.EFCore 如何设计使用一套代码完成的EFCore Migration 构建Saas系统多租户不同业务需求且满足租户自定义分库分表、数据迁移能力?

    下面用一篇文章来完成这些事情 多租户系统的设计单纯的来说业务,一套Saas多租户的系统,面临很多业务复杂性,不同的租户存在不同的业务需求,大部分相同的表结构,那么如何使用EFCore来完成这样的设计呢 ...

  3. pip list 精确查找某一模块的方法

    1. 今天搜资料的时候get一项技能: pip list精确查找某一模块 命令如下: pip list | findstr "win32" (此处win32可以替换成任意想查找的模 ...

  4. antd递归渲染左侧菜单

  5. markdown mermaid流程图

    流程图 所有流程图都由节点.几何图像.箭头或线条组成. mermaid代码定义了这些节点和边的制作和交互方式.可以有不同的箭头类型.多向箭头以及与子图的连接. 节点 节点 flowchart LR i ...

  6. jmu-ds-舞伴问题

    假设在周末舞会上,男士和女士们分别进入舞厅,各自排成一队.跳舞开始,依次从男队和女队队头各出一人配成舞伴,若两队初始人数不同,则较长那一队未配对者等待下一轮舞曲.现要求写一算法模拟上述舞伴配对问题. ...

  7. Solon 开发

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  8. winform设置所有窗体统一图标

    class WindowHookerManager { static WindowHooker hooker = new WindowHooker(); public static void SetA ...

  9. jQuery ajax get与post后台交互中的奥秘

    这两天在做关注功能模块(类似于Instagram).多处页面都需要通过一个"关注"按钮进行关注或者取消该好友的操作.一个页面对应的放一个按钮,进行操作.效率低维护性差.因此想通过j ...

  10. redis常见类型

    1.(key) Redis 键命令用于管理 redis 的键. 语法 Redis 键命令的基本语法如下: 1 redis 127.0.0.1:6379> COMMAND KEY_NAME  实例 ...