前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala的控制结构

Scala的控制结构

作者头像
栗筝i
发布2022-12-01 20:59:29
3810
发布2022-12-01 20:59:29
举报
文章被收录于专栏:迁移内容

一、 if else表达式

scala中没有三目运算符,因为根本不需要。scala中if else表达式是有返回值的,如果if或者else返回的类型不一样,就返回Any类型(所有类型的公共超类型)。 例如:if else返回类型一样

代码语言:javascript
复制
scala> val a3 = 10
     | val a4 =
     |   if(a3 > 20){
     |     "a3大于20"
     |   }else{
     |     "a3小于20"
     |   }
     | println(a4)
a3小于20
val a3: Int = 10
val a4: String = a3小于20

例如:if else返回类型不一样

代码语言:javascript
复制
scala> val a5 =
     |   if(a3 > 20){
     |     "a3大于20"
     |   }
     | println(a5)
()
val a5: Any = ()

如果缺少一个判断,什么都没有返回,但是Scala认为任何表达式都会有值,对于空值,使用Unit类,写做(),叫做无用占位符,相当于java中的void。

注意:行尾的位置不需要分号,只要能够从上下文判断出语句的终止即可。但是如果在单行中写多个语句,则需要分号分割。在Scala中,{}快包含一系列表达式,其结果也是一个表达式。块中最后一个表达式的值就是块的值。

二、while表达式

Scala提供和Java一样的while和do循环,与If语句不同,While语句本身没有值,即整个While语句的结果是Unit类型的()。

  1. while循环
代码语言:javascript
复制
scala> var n = 1;
     | val while1 = while(n <= 10){
     |   n += 1
     | }
     | println(while1)
     | println(n)
()
11
var n: Int = 11
val while1: Unit = ()
  1. while循环的中断
代码语言:javascript
复制
scala> import scala.util.control.Breaks
     | val loop = new Breaks
     | loop.breakable{
     |   while(n <= 20){
     |     n += 1;
     |     if(n == 18){
     |       loop.break()
     |     }
     |   }
     | }
     | println(n)
18
import scala.util.control.Breaks
val loop: scala.util.control.Breaks = scala.util.control.Breaks@6ce9771c

注意:scala并没有提供break和continue语句来退出循环,如果需要break,可以通过几种方法来做1、使用Boolean型的控制变量 2、使用嵌套函数,从函数中return 3、使用Breaks对象的break方法。

三、 for表达式

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

1) for示例1:to左右两边为前闭后闭的访问
代码语言:javascript
复制
scala> for(i <- 1 to 3; j <- 1 to 3){
     |   print(i * j + " ")
     | }
     | println()
1 2 3 2 4 6 3 6 9 
2) for示例2:until左右两边为前闭后开的访问
代码语言:javascript
复制
scala> for(i <- 1 until 3; j <- 1 until 3) {
     |   print(i * j + " ")
     | }
     | println()
1 2 2 4 
3) for示例3:引入保护式(也称条件判断式)该语句只打印1 3。保护式满足为true则进入循环内部,满足为false则跳过,类似于continue
代码语言:javascript
复制
scala> for(i <- 1 to 3 if i != 2) {
     |   print(i + " ")
     | }
     | println()
1 3 
4) for示例4:引入变量
代码语言:javascript
复制
scala> for(i <- 1 to 3; j = 4 - i) {
     |   print(j + " ")
     | }
     | println()
3 2 1 
5) for示例5:将遍历过程中处理的结果返回到一个,使用yield关键字
代码语言:javascript
复制
scala> val for5 = for(i <- 1 to 10) yield i
     | println(for5)
Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val for5: IndexedSeq[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
6) for示例6:使用花括号{}代替小括号()
代码语言:javascript
复制
scala> for{
     |   i <- 1 to 3
     |   j = 4 - i}
     |   print(i * j + " ")
     | println()
3 4 3 

注意:{}和()对于for表达式来说都可以。for 推导式有一个不成文的约定:当for 推导式仅包含单一表达式时使用原括号,当其包含多个表达式时使用大括号。值得注意的是,使用原括号时,早前版本的Scala 要求表达式之间必须使用分号。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 if else表达式
  • 二、while表达式
  • 三、 for表达式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档