Scala学习笔记——内建控制结构

Scala的内建控制结构包括:if、while、for、try、match和函数调用

1.if表达式

    //常见的写法
    var filename = "name"
    if (!args.isEmpty)
      filename = args(0)

    //比较简洁的写法
    var filename1 =
      if (!args.isEmpty) args(0)
      else "name"

    //更简洁的写法,不要有中间变量
    println(if(!args.isEmpty) args(0) else "name")

2.while循环,while循环和其他语言的一样,有while和do while

  Scala中对再次赋值语句的返回值是Unit,比如下面这个例子

3.for表达式

    //列出当前目录的文件和文件夹
    val filesHere = (new java.io.File(".")).listFiles

    for (file <- filesHere)
      println(file)

    //打印1到4
    for (i <- 1 to 4)
      println(i)

    //打印1到3
    for (i <- 1 until 4)
      println(i)

    //for循环中的过滤功能
    for (file <- filesHere if file.getName.endsWith("project"))
      println(file)

    //for循环中的过滤功能,多个条件用;号分隔
    for (file <- filesHere
         if file.isFile;
         if file.getName.endsWith("sbt")
    ) println(file)

    //嵌套枚举
    for( a <- 1 to 3; b <- 1 to 3){
      println( "Value of a: " + a );
      println( "Value of b: " + b );
    }

    //for循环采用yield,可以从存储中返回for循环中的变量的值,输出List(1, 2, 4, 5, 6, 7)
    val numList = List(1,2,3,4,5,6,7,8,9,10)
    System.out.println(
      for{
        a <- numList if a != 3; if a < 8
      }yield a
    )

4.使用try表达式处理异常

  抛出异常

//抛出异常
  def isEven(n : Int): Unit ={
    val half =
      if (n % 2 == 0) n / 2
      else throw new RuntimeException("n必须是偶数")
  }

  捕获异常,finally语句

  val file = new FileReader("input.txt")
    try {
      //使用文件
    } catch {
      //捕获异常
      case ex: FileNotFoundException =>
      case ex: IOException =>
    } finally {
      //确保文件关闭
      file.close()
    }

  catch子语句的返回值

//try-catch-finally语句的返回值
  def urlFor(path:String) =
    try{
      new URL(path)
    }catch{
      case e:MalformedURIException => new URL("www.scala-lang.org")
    }

  避免使用finally子句返回值

5.匹配(match)表达式

  Scala的match表达式类似于switch语句,其中 _ 表示其他的情况

  match表达式中的每一个备选项中break是隐含的,也就是不允许从一个备选项中落到下一个备选项中

    //匹配表达式
    val firstArg = if (args.length > 0) args(0) else ""
    firstArg match {
      case "1" => println("A")
      case "2" => println("B")
      case "3" => println("C")
      case _ => println("D")
    }

6.Scala中不再使用break和continue

可以用if替换每个continue,用布尔变量来替换每个break

时间: 2024-11-10 11:40:48

Scala学习笔记——内建控制结构的相关文章

原创:Scala学习笔记(不断更新)

Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中. 递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(

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

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

SuperSocket框架学习笔记3-构建Unity3D__WebSocket4Net客户端程序

确保上一节服务器程序运行没有问题,否则请仔细看上一节 新建一个Unity3D项目(我的Unity3D版本是4.2.0) 1,在Unity3D内新建一个文件夹命名 Plugin 将下载的 客户端: WebSocket4Net  客户端必备 http://websocket4net.codeplex.com/ WebSocket4Net.dll   这个DLL复制到 Unity3D里面刚才新建的 Plugin文件夹内(注意Unity不得使用中文) ----------- 查看Unity下面的状态面板

内建控制结构

Scala里没有多少内建控制结构.仅有的包括if,while,for,try,match和函数调用.如此之少的理由是,从一开始Scala就包括了函数文本.代之以在基本语法之上一个接一个添加高层级控制结构,Scala把它们汇集在库里. 有件你会注意到的事情是,几乎所有的Scala的控制结构都会产生某个值.这是函数式语言所采用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做.你也可以把这种方式看做早已存在于指令式语言中的一种趋势(函数调用返回值,被调用函数更新被当作参数传入的输出变量也归

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

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

HANA学习笔记1-搭建HANA学习环境

一 硬件环境     两台电脑,一台为服务器装跑HANA虚拟机,一台为客户端运行HANA_STUDIO     服务器:内存至少需要16G     windows server 2003 64位     客户端:windows 7 64位   二软件环境     服务器:VMware 9.0    HANA虚拟机镜像     客户端:jdk   sapcar   SAP_HANA_CLIENT SAP_HANA_STUDIO 软件的下载地址如下:     HANA虚拟机镜像:http://pan

Perl语言学习笔记 10 其他控制结构

1.unless控制结构 条件为假时执行,与if相反 可以附带else 2.Until控制结构 条件为假时执行,一直执行到条件为真: 3.条件修饰词 效果等同于: 类似的模式: 4.裸块控制结构 { body; body; .... } 有利于为临时变量圈定有效范围 5.elsif子句 6.自增.自减 同c语言 7.for 用法同c语言 8.for与foreach 在perl中,两者等价,优先选择纯正的foreach 9.5种循环块:for.foreach.while.until.裸块 last

Scala学习笔记(三)

无参方法 功能:将方法的定义转换为属性字段的定义: 作用范围:方法中没有参数,并且方法仅能通过读取所包含的对象属性去访问可变状态,而不改变可变状态,就可使用无参方法: 例子: abstract class Element{     def texts:String } class Sub1Element(text:String) extends Element{     val texts:String = text } object RunApplication{     def main(a

SuperSocket框架学习笔记2-构建SuperWebSocket服务器程序

SuperSocket框架学习笔记2-构建SuperWebSocket服务器程序 上一节简单介绍了 基本的SuperSocket服务器 这一节我们使用 SuperWebSocket构建一个 能与Unity3D通信的(Console控制台)服务器程序 嘎嘎 先下载   需要的  DLL类库 服务端: SuperSocket1.6.1 这个必备 http://www.supersocket.net/ SuperWebSocket 服务端必备 http://superwebsocket.codeple