zoukankan      html  css  js  c++  java
  • 大数据基础---Scala流程控制语句

    一、条件表达式if

    Scala 中的 if/else 语法结构与 Java 中的一样,唯一不同的是,Scala 中的 if 表达式是有返回值的。

    object ScalaApp extends App {
    
      val x = "scala"
      val result = if (x.length == 5) "true" else "false"
      print(result)
      
    }
    

    在 Java 中,每行语句都需要使用 ; 表示结束,但是在 Scala 中并不需要。除非你在单行语句中写了多行代码。

    二、块表达式

    在 Scala 中,可以使用 {} 块包含一系列表达式,块中最后一个表达式的值就是块的值。

    object ScalaApp extends App {
    
      val result = {
        val a = 1 + 1; val b = 2 + 2; a + b
      }
      print(result)
    }
    
    // 输出: 6
    

    如果块中的最后一个表达式没有返回值,则块的返回值是 Unit 类型。

    scala> val result ={ val a = 1 + 1; val b = 2 + 2 }
    result: Unit = ()
    

    三、循环表达式while

    Scala 和大多数语言一样,支持 whiledo ... while 表达式。

    object ScalaApp extends App {
    
      var n = 0
    
      while (n < 10) {
        n += 1
        println(n)
      }
    
      // 循环至少要执行一次
      do {
        println(n)
      } while (n > 10)
    }
    

    四、循环表达式for

    for 循环的基本使用如下:

    object ScalaApp extends App {
    
      // 1.基本使用  输出[1,9)
      for (n <- 1 until 10) {print(n)}
    
      // 2.使用多个表达式生成器  输出: 11 12 13 21 22 23 31 32 33
      for (i <- 1 to 3; j <- 1 to 3) print(f"${10 * i + j}%3d")
    
      // 3.使用带条件的表达式生成器  输出: 12 13 21 23 31 32
      for (i <- 1 to 3; j <- 1 to 3 if i != j) print(f"${10 * i + j}%3d")
    
    }
    

    除了基本使用外,还可以使用 yield 关键字从 for 循环中产生 Vector,这称为 for 推导式。

    scala> for (i <- 1 to 10) yield i * 6
    res1: scala.collection.immutable.IndexedSeq[Int] = Vector(6, 12, 18, 24, 30, 36, 42, 48, 54, 60)
    

    五、异常处理try

    和 Java 中一样,支持 try...catch...finally 语句。

    import java.io.{FileNotFoundException, FileReader}
    
    object ScalaApp extends App {
    
      try {
        val reader = new FileReader("wordCount.txt")
      } catch {
        case ex: FileNotFoundException =>
          ex.printStackTrace()
          println("没有找到对应的文件!")
      } finally {
        println("finally 语句一定会被执行!")
      }
    }
    

    这里需要注意的是因为 finally 语句一定会被执行,所以不要在该语句中返回值,否则返回值会被作为整个 try 语句的返回值,如下:

    scala> def g():Int = try return 1 finally  return  2
    g: ()Int
    
    // 方法 g() 总会返回 2
    scala> g()
    res3: Int = 2
    

    六、条件选择表达式match

    match 类似于 java 中的 switch 语句。

    object ScalaApp extends App {
    
      val elements = Array("A", "B", "C", "D", "E")
    
      for (elem <- elements) {
        elem match {
          case "A" => println(10)
          case "B" => println(20)
          case "C" => println(30)
          case _ => println(50)
        }
      }
    }
    
    

    但是与 Java 中的 switch 有以下三点不同:

    • Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常量;
    • Scala 中每个分支语句后面不需要写 break,因为在 case 语句中 break 是隐含的,默认就有;
    • 在 Scala 中 match 语句是有返回值的,而 Java 中 switch 语句是没有返回值的。如下:
    object ScalaApp extends App {
    
      val elements = Array("A", "B", "C", "D", "E")
    
      for (elem <- elements) {
        val score = elem match {
          case "A" => 10
          case "B" => 20
          case "C" => 30
          case _ => 50
        }
        print(elem + ":" + score + ";")
      }
    }
    // 输出: A:10;B:20;C:30;D:50;E:50;
    

    七、没有break和continue

    额外注意一下:Scala 中并不支持 Java 中的 break 和 continue 关键字。

    八、输入与输出

    在 Scala 中可以使用 print、println、printf 打印输出,这与 Java 中是一样的。如果需要从控制台中获取输入,则可以使用 StdIn 中定义的各种方法。

    val name = StdIn.readLine("Your name: ")
    print("Your age: ")
    val age = StdIn.readInt()
    println(s"Hello, ${name}! Next year, you will be ${age + 1}.")
    

    参考资料

    1. Martin Odersky . Scala 编程 (第 3 版)[M] . 电子工业出版社 . 2018-1-1
    2. 凯.S.霍斯特曼 . 快学 Scala(第 2 版)[M] . 电子工业出版社 . 2017-7

    系列传送门

  • 相关阅读:
    使用Modelsim对Nios II系统进行系统级仿真
    电视相关知识学习
    SAD和SATD的区别[摘]
    vim自动补全括号的最好方法
    vim sinppets插件介绍
    在centos下安装开发环境
    初始化以及动态设置Edit控件的背景及字体颜色
    CTreeCtrl SetItemData 释放问题
    C#4.0 新特性 匿名方法,lambds
    对象序列化Serialization与Deserialize方法进行反序列化
  • 原文地址:https://www.cnblogs.com/shun7man/p/13206288.html
Copyright © 2011-2022 走看看