Scala只内置了为数不多的几种程序控制语句:if、while、for、try catch以及函数调用,这是因为从Scala诞生开始就包含了函数字面量,Scala内核没有定义过多的控制结构,而是可以通过额外的库来扩展程序的控制结构。

一、if表达式

与其他语言相同,Scala中的if也是选择(分支),与其他的语言不同的是每个表达式都可以返回值。

var  age = 25
val result = if(age > 20) "worker" else "student"
println(result)

  

二、while循环

有两种形式, while(......){}  和 do{}while(......)

Scala中while和do-while被成为循环而不是表达式,是因为它们没有返回值,返回Unit或者()

三、for表达式

1.for的一个基本用法与Java相似,可用于枚举集合元素

val filesHere = (new java.io.File(".")).listFiles
for(file <- filesHere)
println(file)

支持所有类型的集合类型

for(i <- 1 to 4)
println(i)

  

2.过滤

for表达式可以添加一个过滤器——在for的括号内添加一个或多个if语句。

例如,不枚举集合中的每个元素,而是只迭代某些符合条件的元素。

val filesHere = (new java.io.File(".")).listFiles
for(file <- filesHere
if file.isFile
if file.getName.endsWith(".scala"))
println(file)

  

3.嵌套迭代

for表示式支持多重迭代

4.绑定中间变量

5.生成新集合

基本语法 : for clauses yield body  ,其中 clauses  yield 是关键字

四、用try表达式处理异常

1.抛出异常

抛出异常的方式与Java中相同

val half =
if (n % 2 == 0)
n/2
else
throw new RuntimeException("n must be even")

  

2.捕获异常

try{}catch{}

3.finally

finally中如果有返回值将会覆盖try中的返回值,所以在finally中应尽量避免使用return

4.生成返回值

五、Match表达式

该表达式支持从多个选择中选取其一执行,类似Java中的switch

true/false布尔表达式 match {
case "salt" => println("pepper")
case "chips" => println("salsa")
case "eggs" => println("bacon")
case _ => println("huh?")
}  

使用中注意以下三点:

  • 一是任何类型的常量都可以用在 case 语句中,而不仅仅是 int 或是枚举类型。
  • 二是每个 case 语句无需使用 break ,Scala不支持“fall through”。
  • 三是Scala的缺省匹配为 _ ,其作用类似 java 中的 default

六、Scala中没有提供break和continue,但是可以使用一些方法实现break和continue的功能

var i=0
var foundIt=false
while (i < args.length && !foundIt) {
if (!args(i).startsWith("-")) {
if(args(i).endsWith(".scala"))
foundIt=true
}
i=i+1
}

  

当然,Scala 在scala.util.control 包中定义了 break 控制结构。它的实现是通过抛出异常给上级调用函数。

import scala.util.control.Breaks._
import java.io._ val in = new BufferedReader(new InputStreamReader(System.in)) breakable {
while(true) {
println("? ")
if(in.readLine()=="") break
}
}

Scala学习随笔——控制语句的更多相关文章

  1. Scala学习随笔——深入类和对象

    函数化对象(又称方程化对象)指的是所定义的类或对象不包含任何可以修改的状态. 本篇随笔就是着重记录函数化对象.定义了一个有理数类定义的几个不同版本,以介绍 Scala 类定义的几个特性:类参数和构造函 ...

  2. Scala学习随笔——Scala起步

    实验楼学习Scala语言的笔记,课程网址为https://www.shiyanlou.com/courses/490 一.Scala简介 Scala 是一门多范式的编程语言,类似于 Java .设计初 ...

  3. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  4. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  5. (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

    特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ

  6. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  7. C#程序集Assembly学习随笔(第一版)_AX

    ①什么是程序集?可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.嗯,这个确实简单了些,但我是这么理解的.详细:http://blog.csdn.net/sws8327/ ...

  8. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  9. Scala学习网址

    scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124

随机推荐

  1. CSS3裁剪与遮罩解析

    一.用途 CSS3裁剪与遮罩(Clipping and Masking)用来隐藏元素的一部分而显示另一部分 二.区别 CSS3裁剪与遮罩(Clipping and Masking)用来隐藏元素的一部分 ...

  2. 路由vue-router基础

    目录 1. 基本例子 2. 动态路由匹配 3. 嵌套路由 4. 编程式导航 5. 命名路由 6. 命名视图 7. 重定向和别名 8. 向路由组件传递props 9. HTML5 History模式 官 ...

  3. 大数据服务大比拼:AWS VS. AzureVS.谷歌

    [TechTarget中国原创] 对于企业用户来说,大数据服务是一项较具吸引力的云服务.三大巨头AWS.Azure以及谷歌都在力争夺得头把交椅,但是最后到底是哪一家能够取得王座之战的胜利呢? 云市场正 ...

  4. .gitignore 中文文件夹无效

    有个文件夹名如:测试 在.gitignore中添加  /测试/   但运行命令git status后发现还是被追踪到了 一番搜索后终于发现.gitignore文件编码是GBK的,重新将文件保存成utf ...

  5. 抓包工具 - Fiddler - (一)

    <转载于 miantest> Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888 ...

  6. 添加selenium对应的jar包至pom.xml

    1.进入https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java,点开相应的版本 2.复制图中选中的代码,粘贴至 ...

  7. 一个初学者的辛酸路程-继续Django

    问题1:HTTP请求过来会先到Django的那个地方? 先到urls.py  ,里面写的是对应关系,1个URL对应1个函数名. 如果发URL请求过来,到达这里,然后帮你去执行指定的函数,函数要做哪些事 ...

  8. Python学习记录一

    1.这个在unix类的操作系统才有意义.#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器:#!/usr/bin/env python这种用 ...

  9. ASP.NET Core ---异常处理

    一.局部异常处理: 在Action里面catch 二.全局异常处理: 1.默认的异常处理配置: 默认配置在StartUp文件的Configure中注册错误处理,显示开发者错误页面: public vo ...

  10. 牛客练习赛22-E.简单数据结构1(扩展欧拉定理降幂 +树状数组)

    链接:E.简单数据结构1 题意: 给一个长为n的序列,m次操作,每次操作: 1.区间加 2.对于区间,查询 ,一直到- 请注意每次的模数不同.   题解:扩展欧拉定理降幂 对一个数p取log(p)次的 ...