控制结构

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. IntelliJ idea 的破解

    ·1.破解的jar包下载链接: https://pan.baidu.com/s/1JV6GwguGQNs5pNQtst29Hw  提取码: u2jd 2.安装和破解地址:https://www.cnb ...

  2. iOS.NS_DEPRECATED_IOS

    如何处理被NS_DEPRECATED_IOS标记的selector, 例如:类 AVAudioSession中有: - (BOOL)setPreferredHardwareSampleRate:(do ...

  3. Scrapy框架——CrawlSpider类爬虫案例

    Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...

  4. (转帖)CentOS最常用命令及快捷键整理

    原文:http://www.centoscn.com/CentOS/help/2014/0306/2493.html 最近开始学Linux,在VMware Player中安装了CentOS 6.4.为 ...

  5. python基础之Day4

    流程判断 一.if 1.语法一 各条件都执行 if条件1: if条件2: if条件3: 2.语法二 if多分支,自上而下执行,一旦满足条件,后面代码即使满足条件也不会执行 if条件1: elif条件2 ...

  6. 格式化输出之 每行N个元素 list拆分

    for i in range(0,len(XSECT),5): out_BLDdat.write(' '.join( map('{:10.4f}'.format,XSECT[i:i+5]) ) + ' ...

  7. Python之路(第十三篇)time模块、random模块、string模块、验证码练习

    一.time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.(从 ...

  8. android 打开新窗口

    ImageView loginBtn = (ImageView)findViewById(R.id.login_button); loginBtn.setOnClickListener(new Vie ...

  9. jQuery加载完成事件 $(function(){ })的全局异常拦截

    通常我们在页面加载完成的时候要写入一些功能脚本,如: $(function(){/*脚本 - 1*/ console.log('start'); }) $(function(){/*脚本 - 2*/ ...

  10. openssl编译安装-各种蛋疼

    arm平台  ubuntu Linux xxxxxx 3.0.62 #2 PREEMPT Tue Apr 2 20:14:12 CST 2013 armv7l armv7l armv7l GNU/Li ...