1. 程式人生 > >Scala語法(二)——控制結構

Scala語法(二)——控制結構

Scala中的基本控制結構有順序、條件和迴圈三種方式,這個和其他的JVM語言是一致的,但是Scala也有一些高階的流程控制結構類模式匹配。

1、程式程式碼:

package com.dtspark.scala.basic
object controlStructures {
  def main(args: Array[String]): Unit = {
    println("Scala")
    var age=10
    //此時因為Worker和Student都是字串,所以result的型別是string型別
    val result=if(age>25)"Worker"
else"Student" println(result) //此時因為if表示式中的else的內容一個是字串型別,一個整型,所以result1的型別是兩者的公共父類Any val result2=if(age>18)"Adult" else 17 val result3=if(age>18)"Adult" //列印的是(),即返回的是空值,Unit型別 println(result3) var x,y=0 val result4=if(age<18) { x=x+1 y=y+1 x+y }else
0 println(result4) for(i<-0 to 5 if i==2) { println(i) } var flag=true var sum=0 for(i<-0 to 6 if flag) { sum=sum+i if(5==i) flag=false } println("sum="+sum) sum=0 /* for(i<-0 to 6) { sum=sum+i //return返回的是方法級別的,即後面的不會執行,直接退出整個def方法 if(5==i) return } println("sum with return="+sum)*/
for(item<-"Hello Spark") println(item) import scala.util.control.Breaks._ flag=true breakable { while(flag) { for(item<-"Spark") { println(item) if(item=='r') { flag=false break } } } } println("while finished!!!") } }

2、語法說明

  • if語句,if條件表示式會根據if後面括號裡面的boolean值來決定整個if表示式的值

    • 1.Scala中的if條件表示式是有值的!!!這個跟java是不一樣的
    • 2.if條件表示式中可以進行型別推導,型別推導的一般過程就是根據變數值的型別來推導確定變數的型別,這在很多複雜演算法的實現時可以讓我們
    • 省略掉變數的型別的書寫,為複雜演算法的實現提供了非常大的便利
    • 3.下面的例子節選自Spark的核心類SparkContext,如果if後面沒有else部分,預設的實現時if(…)…else(),在else部分雖然不返回有意義的結果,但依舊沒有省略else,而是使用了else{None}這種方式,其目的是為了確保if條件表示式的型別為處理邏輯需要的型別Optinon,而不是Any型別,為下一步的處理打下基礎
      例:if(isEventLogEnabled){Some(logger)}else{None}
    • 4.if條件表示式中如果有多條語句可以使用{}包裹起來,{}中的最後一條語句是計算結果
    • 5.{…}代表了一個語句塊,語句塊是有值的,值就是最後一條語句,值型別就是最後一條語句的型別。
    • 6.if表示式可以用在for迴圈等其它控制結構中用於限制結果
  • for語句,for迴圈是不斷的迴圈一個集合,然後根據for迴圈後面的{…}程式碼部分會根據for迴圈(…)裡面提取的,集合的item來作為{…}的輸入程序流程控制.
    1.for迴圈中加入的if叫做條件守衛,用於限制for迴圈(優化for迴圈,去掉不必要的執行步驟,或者說用於跳出for迴圈)
    2.在for迴圈中能夠提取出什麼內容取決於後面集合的型別
    3.想跳出for迴圈除了加入if守衛以外,還可以使用return關鍵字

  • while迴圈,也是迴圈集合來作為{…}的輸入,進而完成流程的控制的,while迴圈在實際,Server和Framework開發中至關重要,例如讓一個執行緒一直迴圈下去,一般都會使用while