Scala内建的控制结构屈指可数,仅有if, while, for, match, try和函数调用而已。

  几乎所有的Scala控制结构都会产生某个值(while和 do while虽然不能产生有意义的值,但是也会返回Unit类型的值,称为unit value,写成 () )。unit value () 是Scala的Unit不同于Java的void的地方。通常赋值语句会返回 unit value ()。因此Java代码中经常用于文件读取的代码:

  var line = ""

  while((line = fr.readline()) != ""){

    println("Read: " + line)}

即使换成了Scala风格的也不能运行,因为line = fr.readline()作为赋值语句返回的是 (), 其和字符串 "" 比较总不相等,所以会陷入死循环。

For循环

  另外,在for循环中还可以加入过滤器filter, 其实就是if判断,例如: (注意两个条件之间要用分号隔开)

  for(file <- fileList

    if file.isFile;

    if file.getName().endWith(".scala")

  )println(file.getName())

  for循环也可以在一个语句中嵌套,例如:

  for(file <- fileList

    lilne <- fileLines(file))println(line)

Match匹配

  与Java的switch相比,match还是有些不同的,主要体现在以下几点:

1)任何类型的常量(或其它什么东西)都可以当成Scala里比较用的样本 (case),而不只是java中的整数类型和枚举常量;

2)Scala 的模式匹配没有break,但其实是隐含的。

3)match表达式也能产生值。。。很强大,可以将匹配得到的值作为返回值赋给其它变量。

抛弃break和continue

  Scala去掉了break和continue,因为函数式风格不需要。。。可用if代替每个continue,用布尔变量代替每个break。

变量范围

  Scala的变量的有效作用范围和Java很相似,唯一需要注意的地方是Scala允许在内部范围内定义与外部范围内名字相同的变量。内部变量被认为是遮蔽了外部的变量。例如:

  for(i <- 1 to 2){
    val a = 5
    val b = 10
    if(true){
      val a = 6
      println(a.toString())
      println(b.toString())
    }
    println(a.toString())
  }                           //输出:6 10 5 6 10 5

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

  1. 2.scala控制结构、函数、异常处理

    2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...

  2. scala控制结构

    #判断 scala> def min(x:Int,y:Int):Int={ var a=x if(x>y) a=y return a } scala> min(1,2)res1: I ...

  3. Scala实战高手****第4课:零基础彻底实战Scala控制结构及Spark源码解析

    1.环境搭建 基础环境配置 jdk+idea+maven+scala2.11.以上工具安装配置此处不再赘述. 2.源码导入 官网下载spark源码后解压到合适的项目目录下,打开idea,File-&g ...

  4. Scala 编程(四)内建控制结构

    if 表达式 Scala 的 if 如同许多其它语言中的一样工作.它测试一个状态并据其是否为真,执行两个分支中的一个: var filename = "default.txt" i ...

  5. scala编程(七)——内建控制结构

    几乎所有的 Scala 的控制结构都会产生某个值.这是函数式语言所采用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做.另外,指令式语言经常具有三元操作符(如 C,C++和 Java 的? ...

  6. Programming In Scala笔记-第九章、控制抽象

    本章主要讲解在Scala中如何使用函数值来自定义新的控制结构,并且介绍Curring和By-name参数的概念. 一.减少重复代码 1.重复代码的场景描述 前面定义的函数,将实现某功能的代码封装到一起 ...

  7. 2019/2/23Scala学习开始(Scala简介)

    Scala简介    Scala是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scala运行在Java虚拟机上,并兼容现有的Java程序 ...

  8. Scala详解

    1       快速入门... 4 1.1             分号... 4 1.2             常变量声明... 4 1.2.1         val常量... 4 1.2.2  ...

  9. Scala学习(二)练习

    Scala控制结构和函数&练习 1. 一个数字如果为正数,则它的signum为1:如果是负数,则signum为-1:如果为0,则signum为0:编写一个函数来计算这个值 简单逻辑判断: 测试 ...

随机推荐

  1. 用自己的话表达出来-Servlet

    什么是Servlet Servlet就是工作在服务器端的类,该类可以处理用户传过来的请求,也可以通过响应向用户输送数据. 如何使用Servlet Servlet就是处理用户的HTTP请求,然后回送HT ...

  2. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  3. elasticsearch文档-modules

    elasticsearch文档-modules modules 模块 cluster 原文 基本概念 cluster: 集群,一个集群通常由很多节点(node)组成 node: 节点,比如集群中的每台 ...

  4. ASP.NET MVC相关

    Orchard源码分析(7):ASP.NET MVC相关 概述 Orchard归根结底是一个ASP.NET MVC(以后都简称为MVC)应用,但在前面的分析中,与MVC相关内容的涉及得很少.MVC提供 ...

  5. 重载 C 函数

    在 clang 的扩展下,可以重载 C 函数,例如重载 sin 函数: float __attribute__((overloadable)) sin(float x) { return sinf(x ...

  6. c语言,字符串原地翻转

    实现字符串的原地翻转: #include<stdlib.h> #include<stdio.h> #include<assert.h> #define SWAP(a ...

  7. wcf传输Dataset大数据量 -压缩(一)

    wcf传输Dataset大数据量 -压缩(一) 由于WCF不能传输DataTable(不能序列化),所以更多项目中都会使用DataSet作为查询集合的首选返回类型,但是由于DataSet会生成很多的状 ...

  8. JS自动刷新页面一次

    <script type="text/javascript"> //刷新页面 if(location.href.indexOf("refresh=1" ...

  9. 解决中文乱码( jsp表单提交中文时出现乱码)

    有三种方法: 1.建立一个filter中文解决乱码 2.Struts2在struts.xml中修改默认的编码设定 3.用Spring解决中文乱码 4.直接在jsp中修改解决 1.建立一个filter解 ...

  10. SQL Server中的高可用性1

    SQL Server中的高可用性(1)----高可用性概览   自从SQL Server 2005以来,微软已经提供了多种高可用性技术来减少宕机时间和增加对业务数据的保护,而随着SQL Server ...