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
}
)
}
Scala中的流程控制的更多相关文章
- Java中的流程控制(三)
关于Java中的流程控制 关于Java中的流程控制 4.do while语句 do while语句的功能和while语句差不多,只不过它是在执行完第一次循环后才检测条件表达式的值,这意味着包含在大括号 ...
- Python基础之:Python中的流程控制
目录 简介 while语句 if 语句 for语句 Break Continue pass 简介 流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样 ...
- python中的流程控制
目录 引言 流程控制的分类 分支结构 单if结构 if与else结构 if与elif与else结构 if分支的嵌套 循环结构 while循环 while + break循环 while + conti ...
- [原创]Scala学习:流程控制,异常处理
1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...
- C中的流程控制
一. 流程控制 l 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. l 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. l 循环结构:在给定条件成立的情况下,反复执行某一 ...
- Java中的流程控制(二)
关于Java程序的流程控制(二) 关于Java程序的流程控制(二) 3.switch选择语句 switch语句用于将一个表达式的值同许多其他值比较,并按比较结果选择下面该执行哪些语句. switch( ...
- Java中的流程控制(一)
程序的流程控制(一) 关于Java程序的流程控制(一) 从结构化程序设计角度出发,程序有三种结构: 顺序结构 选择结构 循环结构 1.顺序结构 就是程序从上到下一行行执行,中间没有判断和跳转. 2.i ...
- Java中的流程控制
1.Java中有几种流程控制?分别是什么? 答:有三种流程控制,分别是顺序流程,分支流程和循环流程 2.分支语句if/else有哪三种形式?分别如何使用? 答:if/if-else-/if-else ...
- 在NodeJS中使用流程控制工具Async
本文介绍一款流程控制工具async,在编写接口或者编写测试用例的过程中总是会用到它. 由于nodejs是异步编程模型,有一些在同步编程中很容易做到的事情,现在却变得很麻烦.Async的流程控制就是为了 ...
随机推荐
- Java中的对象、类、抽象类、接口的理解
1.对象 对象是个具体的东西,有着明确的属性特征和行为特征. 例如:你手上牵着的女朋友或男朋友就是个具体的对象. 如图中的苏格兰折耳猫,特征是耳朵向下呈折叠状,有着具体的颜色(你看到的颜色),并且和其 ...
- SpringBoot 与 SpringCloud 的版本对应详细信息
"spring-cloud": { "Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M ...
- mysql 5.7.29 在centos7.6下超简单的本地yum源安装与配置
目录 生成yum源元数据 从网易镜像站下载MySQL 5.7 的 bundle包 创建文件 mysql-local.repo 执行yum install命令 生成yum源元数据 createrepo ...
- Centos7 selinux关闭
getenforce ---查看selinux服务是否开启 setenforce 0|1 0:Permissive 1:Enforcing 上面使用setenforce是临时的效果 永久关闭方法: v ...
- Java在linux环境下和windows环境下日期字符串显示不同
图片如果损坏,点击链接: https://www.toutiao.com/i6511565147322974724/ 出现的现象: 在Java中我想要将当前的时间格式化为需要的字符串,然后存放到数据库 ...
- vps上安装CobaltStrike服务端
今天我在我的vps上安装CobaltStrike服务端,真的是踩坑无数,所以写这篇博客记录一下,防止后人再踩坑 安装Oracle JDK8 官方不建议使用OpenJdk,建议使用Oracle JDK的 ...
- R语言:关于rJava包的安装
R语言:关于rJava包的安装 盐池里的萝卜 2014-09-14 00:53:33 在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jd ...
- 《剑指offer》面试题32 - II. 从上到下打印二叉树 II
问题描述 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 ...
- 多线程的libcurl的使用
摘要:libcurl在多线程中,采用https访问,经常运行一段时间,会出现crash. libcurl的在多线程中的使用特别注意的有两点: 1. curl的句柄不能多线程共享. 2. ssl访问时, ...
- k8s-pv-pvc
1. 简介 持久卷(PersistentVolume,PV)是集群中的一块存储,可以由管理员事先供应,或者 使用存储类(Storage Class)来动态供应. 持久卷是集群资源,就像节点也是集群资源 ...