1. 程式人生 > >Scala 控制結構

Scala 控制結構

1.if…else

    scala中沒有三元運算子,因為根本不需要。scala中if else表示式是有返回值的,如果if或者else返回的型別不一樣,就返回Any型別(所有型別的公共超型別)。

例如:if else返回型別一樣

  val a3 = 10

    val a4 =

      if(a3 > 20){

        "a3大於20"

      }else{

        "a3小於20"

      }

    println(a4)

    例如:if else返回型別不一樣 

   val a5 =

      if(a3 > 20){

        "a3大於20"

      }

    println(a5)

    如果缺少一個判斷,什麼都沒有返回,但是Scala認為任何表示式都會有值,對於空值,使用Unit類,寫做(),叫做無用佔位符,相當於java中的void。

    注:行尾的位置不需要分號,只要能夠從上下文判斷出語句的終止即可。但是如果在單行中寫多個語句,則需要分號分割。在Scala中,{}快包含一系列表示式,其結果也是一個表示式。塊中最後一個表示式的值就是塊的值。

2.while表示式

    Scala提供和Java一樣的while和do迴圈,與If語句不同,While語句本身沒有值,即整個While語句的結果是Unit型別的()。

    ① while迴圈

 var n = 1;

    val while1 = while(n <= 10){

      n += 1

    }

    println(while1)    

    println(n)

    ② while迴圈的中斷

 import scala.util.control.Breaks    

    val loop = new Breaks

    loop.breakable{

      while(n <= 20){

        n += 1;

        if(n == 18){

          loop.break()

        }

      }

    }

    println(n)    

注:scala並沒有提供break和continue語句來退出迴圈,如果需要break,可以通過幾種方法來做

     1、使用Boolean型的控制變數

     2、使用巢狀函式,從函式中return

     3、使用Breaks物件的break方法。

3.for表示式

    Scala 也為for 迴圈這一常見的控制結構提供了非常多的特性,這些for 迴圈的特性被稱為for 推導式(for comprehension)或for 表示式(for expression)。

(1) for示例1:to左右兩邊為前閉後閉的訪問

 for(i <- 1 to 3){

      print(i + " ")

    }

    println()

(2) for示例2:until左右兩邊為前閉後開的訪問

 for(i <- 1 until 3) {

      print(i + " ")

}

println()

(3) for示例3:引入保護式(也稱條件判斷式,守衛)該語句只打印1 3。保護式滿足為true則進入迴圈內部,滿足為false則跳過,類似於continue

 for(i <- 1 to 3 if i != 2) {

    print(i + " ")

    }

    println()

(4)  for示例4:引入變數

for(i <- 1 to 3; j = 4 - i) {

      print(j + " ")

}

(5) for示例5:巢狀for迴圈

 for(i <- 1 to 3; j <- 1 to 3) {

      print(i*j + " ")

}

(6) for示例6:迴圈返回值(將遍歷過程中處理的結果返回到一個,使用yield關鍵字)

val for5 = for(i <- 1 to 10) yield i

println(for5)

(7) for示例7:使用花括號{}代替小括號()

 for{

      i <- 1 to 3    

      j = 4 - i}

print(i * j + " ")

    注:{}和()對於for表示式來說都可以。for 推導式有一個不成文的約定:當for 推導式僅包含單一表達式時使用原括號,當其包含多個表示式時使用大括號。值得注意的是,使用原括號時,早前版本的Scala 要求表示式之間必須使用分號。