控制结构

if条件表达式

  val x = 6
 if (x>0){
   println("This is a positive number")
}else if(x==0){
   println("This is not a zero")
}else{
   println("This is not a positive number")
}
  • 有一点与Java不同的是,Scala中的if表达式的值可以赋值给变量

val y = 6
val a = if (y  > 0) 1 else -1

scala> val x = 1
x: Int = 1
scala> val z = if(x > 0) 1 else "error"
z: Any = 1

scala> val x = -1
x: Int = -1
scala> val z = if(x > 0) 1 else "error"
z: Any = error

scala> val x = -1
x: Int = -1
scala> val z = if(x > 0) 1
z: AnyVal = ()
scala> val z = if(x > 0) 1 else()
z: AnyVal = ()

while循环

scala> var i = 9
i: Int = 9
scala> while (i > 0){
    | i -= 1
    | printf("i is %d\n" , i)
    | }
i is 8
i is 7
i is 6
i is 5
i is 4
i is 3
i is 2
i is 1
i is 0

scala> var i = 0
i: Int = 0
scala> do {
    | i += 1
    | println(i)
    | } while (i < 5)
1
2
3
4
5

for循环

  • 格式

for (变量 <- 表达式) 语句块
//其中,“变量<-表达式”被称为“生成器(generator)”
scala> for (i <- 1 to 5) println(i)
1
2
3
4
5
scala> for (i <- 1 to 5 by 2) println(i)
1
3
5
  • 不希望打印出所有的结果,过滤出一些满足制定条件的结 果,需要使用到称为“守卫(guard)”的表达式

  • 比如,只输出1到5之中的所有偶数,可以采用以下语句

scala> for (i <- 1 to 5 if i % 2 == 0) println(i)
2
4
  • Scala也支持“多个生成器”的情形,可以用分号把它们 隔开,比如:

scala> for (i <- 1 to 5 ; j <- 1 to 3) println(i*j)
1
2
3
2
4
6
3
6
9
4
8
12
5
10
15
  • 可以给每个生成器都添加一个“守卫”,如下:

scala> for (i <- 1 to 5 if i % 2 == 0 ; j <- 1 to 3 if j != i) println(i*j)
2
6
4
8
12
for推导式
  • Scala的for结构可以在每次执行的时候创造一个值,然后将包含了所有产生值的集合作为for循环表达式的结果返回, 集合的类型由生成器中的集合类型确定

  • 通过for循环遍历一个或多个集合,对集合中的元素进行“推导”,从而计算得到新的集合,用于后续的其他处理

  • 格式:

for (变量 <- 表达式) yield {语句块}
scala> val r = for (i <- 1 to 5 if i%2 == 0) yield {println(i); i}
2
4
r: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4)

Scala_控制结构的更多相关文章

  1. PHP语法(三):控制结构(For循环/If/Switch/While)

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 本文我来总结几个PHP常用的控制结构,先来 ...

  2. Python 30分钟入门——数据类型 and 控制结构

    Python是一门脚本语言,我也久闻大名,但正真系统的接触学习是在去年(2013)年底到今年(2014)年初的时候.不得不说的是Python的官方文档相当齐全,如果你是在Windows上学习Pytho ...

  3. 学习scala03 控制结构

    scala拥有非常宽松的控制结构. if与while scala中的if和while几乎和java中的结构一模一样. //if语句 val a= ){ println(“”) }else{ print ...

  4. Lua 学习笔记(四)语句与控制结构

    一.赋值与多重赋值      赋值的基本含义是改变一个变量的值或table中字段的值.Lua中允许“多重赋值”,也就是同时为多个值赋予多个变量,每个变量之间以逗号分隔.      Lua会先对等号右边 ...

  5. Scala入门之控制结构

    package com.dtspark.scala.basics /** * Scala中的基本控制结构有顺序.条件和循环三种方式,这个其它的JVM语言是一致的,但是Scala也有一些高级的流程控制结 ...

  6. 【Java 基础篇】【第三课】表达式、控制结构

    这两天再看敏捷开发流程,我这个算是敏捷博客吗? 哈哈o(∩_∩)o package a.b; public class Three { static void Expression() { Syste ...

  7. scala中如何编写自定义的流程控制结构

    scala是一种函数式编程风格的语言,除了常见的if......else  ,for ,while等传统的流程控制结构,也可以自定义流程控制的控制结构. 再了解scala如何实现编写新的流程结构,我们 ...

  8. oracle PL/SQL(procedure language/SQL)程序设计--控制结构(if else )

    IF逻辑结构:IF-THEN-END IFIF-THEN-ELSE-END IFIF-THEN-ELSIF-END IF 语法 IF condition THEN  statements;[ELSIF ...

  9. TCL语言笔记:TCL中的控制结构命令

    一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...

随机推荐

  1. 多字节字符集与Unicode字符集

    在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset). 多字节字符集: 在最初的时候,Internet上只有一 ...

  2. PID参数调节口诀

    参数整定找最佳, 从小到大顺序查. 先是比例后积分, 最后再把微分加. 曲线振荡很频繁, 比例度盘要放大. 曲线漂浮绕大弯, 比例度盘往小扳. 曲线偏离回复慢, 积分时间往下降. 曲线波动周期长, 积 ...

  3. c#while循环注意continue的地方

    在使用while 时发现一个很大的问题,continue最好慎用! private void do() { int i = 0; while (true) { //continue;//绝对的死循环 ...

  4. gcc产生类型转换告警

    问题背景: 看 https://www.cnblogs.com/sinaxyz/p/4525208.html 这个篇blog时候,发现在应用层代码中,函数 int open_netlink() 中,有 ...

  5. html中 &nbsp; 和空格的区别

    Non-Breaking Space 注意是    这6个字符是一个整体, 在html中, 是空格的占位符.一个   代表一个空格:两个 代表两个空格,即使用几个 就显示几个空格. 但是普通的空格在h ...

  6. About the Cron Expression

    About the Cron Expression Cron is use in Linux for the time schedule Format Seconds Minutes Hours Da ...

  7. sqlserver 数据迁移

    转载地址: 1.https://blog.csdn.net/yh_zeng2/article/details/72901892 2.https://www.cnblogs.com/jpfss/p/91 ...

  8. .NET发送邮件的方法

    整理一下,在.NET中发送邮件的一个方法,代码如下: public static string Net_Email(string strSendto, string strCC, string str ...

  9. Vuejs2.0之异步跨域请求

    Vuejs由1.0更新到了2.0版本.HTTP请求官方也从推荐使用Vue-Resoure变为了axios.接下来我们来简单地用axios进行一下异步请求.(阅读本文作者默认读者具有使用npm命令的能力 ...

  10. Mockito学习1

    Mockito学习1 junitmaven软件测试框架项目管理  Mockito是一个流行的Mocking框架.它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高.因此它十分 ...