Scala 中的 if/else 語法結構與 Java 中的同樣,惟一不一樣的是,Scala 中的 if 表達式是有返回值的。java
object ScalaApp extends App { val x = "scala" val result = if (x.length == 5) "true" else "false" print(result) }
在 Java 中,每行語句都須要使用 ;
表示結束,可是在 Scala 中並不須要。除非你在單行語句中寫了多行代碼。git
在 Scala 中,可使用 {}
塊包含一系列表達式,塊中最後一個表達式的值就是塊的值。github
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 = ()
Scala 和大多數語言同樣,支持 while
和 do ... while
表達式。大數據
object ScalaApp extends App { var n = 0 while (n < 10) { n += 1 println(n) } // 循環至少要執行一次 do { println(n) } while (n > 10) }
for 循環的基本使用以下:scala
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 推導式。3d
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)
和 Java 中同樣,支持 try...catch...finally
語句。code
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 語句的返回值,以下:element
scala> def g():Int = try return 1 finally return 2 g: ()Int // 方法 g() 總會返回 2 scala> g() res3: Int = 2
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 有如下三點不一樣:
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;
額外注意一下: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}.")
更多大數據系列文章能夠參見 GitHub 開源項目: 大數據入門指南