Scala學習筆記(二)流程控制

scala中的基本控制結構有順序、條件和循環三種方式,這個和其他的JVM語言是一致的,但是scala也有一些高級的流程控制結構類模擬匹配;在這裏我們主要說if、for 、while等三種控制結構及企業最佳實踐,並且在最後用spark源碼說明

if流程控制

  • if條件表達式會根據if後面括號裏面的boolean值來決定整個if表達式的值
    • 1.scala中if條件表達式是有值的,這個和java不一樣
    • 2.if條件表達式中可以進行類型推到,實質上將,類型推到的一半過程,就是根據變量的類型來推到確定變量的類型,這在很多複雜算法
    • 的實現的時候,可以讓我們省略掉變量的類型的書寫,爲複雜算法的實現提供了非常大的便利。
    • 3.如果if後面沒有else部分,默認的實現是if(。。)。。。else()
    • 下面的代碼節選自Spark的核心類SparkContext,在else部分雖然不返回有意義的結果,但是依舊沒有省略else,而是使用了else{none}這種結構
    • 其目的是爲了確保if條件表達式的類型爲處理邏輯需要的Opation類型,而不是Any類型,爲下一部處理打下基礎。
    • if(isEventLogEnable){some(logger)}else{None}
    • 4.if表達式中如果有多條語句可以使用花括號包裹起來,但是這裏就有一個問題了,{}中的多條語句最後一條是計算結果。
    • 5.補充說明{…}代表了一個語句塊,語句塊是有值的,值就是最後一條語句的結果,類型就是其類型
    • 6.if表達式可以用在for循環等其他控制結構中用於限制結束

for循環

  • for循環式不斷地循環一個集合,然後根據for循環後面的{…}代碼塊部分會根據for循環
  • ()裏面提取的集合item來作爲{..}的輸入進行流程控制。
  • for循環中加入的if叫做條件守衛,用於限制for循環(優化for循環,去掉不必要的執行步驟,或者說用於跳出for循環)
  • 最後再次強調一下,在for循環中能夠提取出什麼內容取決於後面的集合的類型。
  • 想跳出for循環的話,除了加入if守衛以外,還可以使用return關鍵字。
object ControlStructures {
  def main(args: Array[String]): Unit = {
    println("scala")
    var age = 10
    val result = if (age > 25) "Worker" else "Student" //此時因爲Worker和Student是String類型,所以result也是String類型。
    println(result)
    val result2 = if (age > 18) "Adult" else 1

    var x, y = 0
    val result4 = if (age < 18) {
      x = x + 1;
      y = y + 1;
      x + y
    } else 0
    println(result4)

    println("=======for部分代碼======")

    for(i<-0 to 5 if i%2 == 0){
      println(i)
    }
    var flag = true
    var sum=0
    /*for(i<-0 to 5 if flag){
      sum+=i;
      if(sum>10) flag=false
    }*/
    println("sum="+sum)

    for(item <- "Spark") print(item+",")
    println()
    for(item <- "Hello Spark".split(" ")) println(item)
    sum=0
    for(i<-0 to 5 ){
      sum+=i;
      if(sum>10) return
    }
    println(sum)

    println("=======while部分代碼======")
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章