Scala條件控制與循環

1.if表達式java

  if表達式的定義:在Scala中,if表達式是有值的,就是if或者else中最後一行語句返回的值。
  例如,val age = 30; if (age > 18) 1 else 0
  能夠將if表達式賦予一個變量,例如,val isAdult = if (age > 18) 1 else 0
  另一種寫法,var isAdult = -1; if(age > 18) isAdult = 1 else isAdult = 0,可是一般使用上一種寫法
  if表達式的類型推斷:因爲if表達式是有值的,而if和else子句的值類型可能不一樣,此時if表達式的值是什麼類型呢?Scala會自動進行推斷,取兩個類型的公共父類型。
  例如,if(age > 18) 1 else 0,表達式的類型是Int,由於1和0都是Int
  例如,if(age > 18) "adult" else 0,此時if和else的值分別是String和Int,則表達式的值是Any,Any是String和Int的公共父類型
  若是if後面沒有跟else,則默認else的值是Unit,也用()表示,相似於java中的void或者null。例如,val age = 12; if(age > 18) "adult"。此時就至關於if(age > 18) "adult" else ()。
  將if語句放在多行中:默認狀況下,REPL只能解釋一行語句,可是if表達式一般須要放在多行。
  可使用{}的方式,好比如下方式,或者使用:paste和ctrl+D的方式。
  if(age > 18) { "adult"
  } else if(age > 12) "teenager" else "children"函數

 

2.語句終結符和塊表達式spa

  默認狀況下,scala不須要語句終結符,默認將每一行做爲一個語句scala

  一行放多條語句:若是一行要放多條語句,則必須使用語句終結符
  例如,使用分號做爲語句終結符,var a, b, c = 0; if(a < 10) { b = b + 1; c = c + 1 }
  一般來講,對於多行語句,仍是會使用花括號的方式
  if(a < 10) {
    b = b + 1
    c = c + 1
  }字符串

  塊表達式:塊表達式,指的就是{}中的值,其中能夠包含多條語句,最後一個語句的值就是塊表達式的返回值。
  例如,var d = if(a < 10) { b = b + 1; c + 1 }it

 

3.輸入和輸出for循環

  print和println:print打印時不會加換行符,而println打印時會加一個換行符。ast

  例如,print("Hello World"); println("Hello World")
  printf:printf能夠用於進行格式化
  例如,printf("Hi, my name is %s, I'm %d years old.\n", "Leo", 30)
  readLine: readLine容許咱們從控制檯讀取用戶輸入的數據,相似於java中的System.in和Scanner的做用。import

 

4.循環遍歷變量

  while do循環:Scala有while do循環,基本語義與Java相同。

  var n = 10
  while(n > 0) {
    println(n)
    n -= 1
  }


  Scala沒有for循環,只能使用while替代for循環,或者使用簡易版的for語句
  簡易版for語句:var n = 10; for(i <- 1 to n) println(i)
  或者使用until,表式不達到上限:for(i <- 1 until n) println(i)
  也能夠對字符串進行遍歷,相似於java的加強for循環,for(c <- "Hello World") print(c)


  跳出循環語句
  scala沒有提供相似於java的break語句。
  可是可使用boolean類型變量、return或者Breaks的break函數來替代使用。
  import scala.util.control.Breaks._
  breakable {
    var n = 10
    for(c <- "Hello World") {
      if(n == 5) break;
        print(c)
        n -= 1
      }
     }

  }

5.高級for循環

  多重for循環:九九乘法表

  for(i <- 1 to 9; j <- 1 to 9) {
    if(j == 9) {
      println(i * j)
    } else {
      print(i * j + " ")
    }
  }

 

  if做爲for守衛:取偶數
  for(i <- 1 to 100 if i % 2 == 0) println(i)

  for推導式:構造集合  for(i <- 1 to 10) yield i

相關文章
相關標籤/搜索