zoukankan      html  css  js  c++  java
  • 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
      }
    }
  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/aston/p/8798654.html
Copyright © 2011-2022 走看看