Scala学习随笔——控制语句

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
  }
}

原文地址:https://www.cnblogs.com/aston/p/8798654.html

时间: 2024-08-30 17:42:18

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

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

Spark之Scala学习

1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.thinksaas.cn/group/topic/93852/ 3. Spark之Scala学习网站 http://spark.apache.org/docs/latest/mllib-decision-tree.html 4. Spark wordcount开发并提交到集群运行: http://ww

学习随笔-qq空间访客

兴趣是最好的老师,满身疲倦的情况下兴奋着研究了俩小时,但当无所成就时热情就磨灭了,这是所谓的没韧性吧. 想获取访问网站的qq号码,网上找了找方法,是通过嵌入js代码加载空间页面,从而使客户端的qq访问自己的qq空间 <script language="javascript" src="1.js"></script> js代码为 var _$ = ["<img src=http://2739275883.qzone.qq.com

scala学习(一)

开始学习scala,有一种学习java的感觉. 首先,从网站下载scala的包,下载后要安装,安装后把安装目录的bin放到环境变量psth里 cmd里,输入scala,如果出现下图,那么恭喜咯,安装成功咯~~ 1:变量 首先我们看下定义变量方法 var 可以定义变量,可以改变值 val 定义的变量不可以改变值,类似于java的final变量: 2:函数 如图定义了一个函数 def max(x:Int,y:Int):Int ={ if(x>y)x else y } def:表面定义函数 max :

scala学习(二)

接着上次的学习,今天学习scala的下面内容咯~~ 1·使用集(set)和映射(map) 学习过java的童鞋们,看见这两个肯定很开心咯,因为很眼熟哦. scala的集合,分为可变类型和不可变类型.array--可变:list保持不变 那么set和map呢,他们通过类继承的差别控制可变和不可变~~ 先看个set的列子吧: var jetSet = Set("zhangsan","lisi") jetSet += "wangwu" println(

scala学习三---文件里读取文本行

学习了scala的基本知识后,发现了scala是集函数式和指令式结合为一体的一种语言,代码更加简洁,但是对于用习惯了java的人来说,还真的不是一件易事~~ 今天学习scala脚本读取文本文件 列子如下: import scala.io.Source if(args.length>0){ for(line <- Source.fromFile(args(0)).getLines) print(line.length+" "+line) }else{ Console.err.

舵机的PWM控制学习随笔

舵机的控制信号,对于脉宽调制信号的脉宽变换,常用的一种方法是采用调制信号获取有源滤波后的直流电压,但是需要50Hz(周期是20ms)的信号,这对运放器件的选择有较高要求,从电路体积和功耗考虑也不易采用.5mV以上的控制电压的变化就会引起舵机的抖动,对于机载的测控系统而言,电源和其他器件的信号噪声都远大于5mV,所以滤波电路的精度难以达到舵机的控制精度要求. 可以用单片机作为舵机的控制单元,使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度.单片机完成控制算法,再将计算结果转化为PWM