前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala守卫语句的集中用法

Scala守卫语句的集中用法

作者头像
Spark学习技巧
发布2020-08-27 14:11:10
9400
发布2020-08-27 14:11:10
举报
文章被收录于专栏:Spark学习技巧

相比于JAVA,Scala的if增加了两项强大的功能,一是可以直接作为赋值语句,另一种功能是作为守卫语句,不仅远远超过JAVA,甚至也将PYTHON抛在身后。

1. if作为赋值语句

作为赋值语句,不仅仅只是替代了三元运算符,而且还能支持逻辑语句块,如下:

代码语言:javascript
复制
val (a, b) = (10, 20)
//  更添加更多逻辑控制,且支持语句块
val value = if(a > b) 1 else if(a == b) {
  val c = a - 1
  c * c
} else 1

2. if作为for守卫语句

if作为for守卫语句能实现过滤的效果,显著地降低循环次数,并且更易读,如下:

代码语言:javascript
复制
//  返回大于5的偶数,类型为Vector
val items = for(i <- 1 to 10 if i % 2 == 0 if i > 5) yield i;

从上面可以看出,if作为for守卫语句具有如下特点:

1. 一个for循环可以支持多个if语句,以空格、回车字符分割 2. 多个if语句之间的关系是逻辑与(&&);

需要注意,if守卫语句并不支持其他循环语句,如while。

3. if作为case守卫语句

继续上面的例子,在作为case守卫语句中,能细化case语句的粒度,更易于控制逻辑流转,如下:

代码语言:javascript
复制
var vs = items match {
  // 判断x的长度
  case x if x.size < 1 => null
  //  判断x的内容
  case x if x.contains(8) => 8
}

对于“case”语句,虽然没有显式的“break”语句,但是依旧是“满足即阻断”,只会执行最先满足的“case”,所以,设计“case”执行逻辑时,最重要的就是执行逻辑的优先级。

结论

熟练使用if语句,能实现很优雅的短码效果,更能达到Python提倡的“用一条语句(集合)解决一个问题”。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. if作为赋值语句
  • 2. if作为for守卫语句
  • 3. if作为case守卫语句
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档