好程式設計師大資料學習路線分享Scala分支和迴圈

好程式設計師IT發表於2019-09-02

好程式設計師大資料學習路線分享Scala分支和迴圈

3.3.  條件表示式

表示式:一個具有執行結果的程式碼塊。結果是具體的值或者()

表示式的思考方式:以表示式為中心的程式設計思想

1.表示式和語句的區別:表示式有返回值,語句被執行。表示式一般是一個語句塊,執行後,返回一個值

2.不使用return語句,最後一個表示式即返回值

if/else表示式有值,這個值就是跟在if或者else之後的表示式的值

object ConditionDemo {
   def main(args: Array[String]){
     var x = 1
     // if/else 表示式值賦給變數 y
     val y =  if (x > 0 ) 1  else -1
    println(y)

     // 支援混合型表示式
     // 返回型別是 Any
     val z =  if(x>0) "success"   else  -1
    println(z)

 
     // 如果缺失 else ,相當於 if(x>2) 1 else  ()
     // 返回型別是 AnyVal
     // 如果進行型別判斷和轉換,可以使用:
     //var b = if(m.isInstanceOf[Int]) m.asInstanceOf[Int] else 0
     val m =  if(x>2) 1
    println(m)

     // scala 中,每個表示式都有值, scala 中有個 unit 類,寫作(),相當於 Java 中的  void
     val n =  if(x>2) 1  else ()
    println(n)
    

     //if  巢狀
     val  k=  if(x<0) 0  else  if (x>=1) 1  else -1
    println(k)

  }

執行結果:


Scala的的條件表示式比較簡潔,例如:

  注意:1,每個表示式都有一個型別

 2,條件表示式有值

 3,混合型表示式,結果是Any或者AnyVal

 4,scala沒有switch語句

3.4.  塊表示式

object BlockExpressionDemo {
   def main(args: Array[String]){

     var x = 0

     // scala 中, {} 中可以包含一系列表示式,塊中最後一個表示式的值就是塊的值
     val res = {
       if (x < 0) {
        -1
      }  else  if (x >= 1) {
        1
      }  else {
        "error"
      }
    }
      println(res)

       val x0 = 1
       val y0 = 1
       val x1 = 2
       val y1 = 2
       val distance = {
         val dx = x1 - x0
         val dy = y1 - y0
        Math.sqrt(dx*dx+dy*dy)
      }
      println(distance)

     // 塊語句,最後一句是賦值語句,值是 unit 型別的

      var res2 = {
        val dx = x1 - x0
        val dy = y1 - y0
       val res =  Math.sqrt(dx*dx+dy*dy)
     }
    println(res2)
    
  }

}

執行結果:


注意:

1,塊表示式的值是最後一個表示式的值

2,賦值語句的值是unit型別的,

3.5.  迴圈

scala中有for迴圈和while迴圈,用for迴圈比較多

for迴圈語法結構: for (i <- 表示式/陣列/集合)

while (條件語句){表示式}

do{ 表示式}while()

object ForDemo 
   def main(args: Array[String]){
     // 每次迴圈將區間的一個值賦給 i
     for( i <- 1 to 10)
      println(i)

     //for i <- 陣列
     val arr = Array("a", "b", "c")
     for( i <- arr)
      println(i)

     val s = "hello"
     for(i <- 0 until s.length){
      println(s(i))
    }
     //   或者
     //   for(c <- s)println(c)
     //   或者
     //  for(i <- 0 until s.length){
     //  println(s.charAt(i))
     // 使用了隱式轉換,把字串變成一個 ArrayCharSequence 
     // }
      
     // 高階 for 迴圈
     for(i <- 1 to 3 ; j<- 1 to 3  if i != j)
      print((10*i + j) + "")
      println()

     //for 推導式,如果 for 迴圈的迴圈體以 yeild 開始,則該迴圈會構建出一個集合或者陣列,每次迭代生成其中的一個值。
     val v=  for ( i <- 1 to 10 ) yield i*10
            println (v)
      
     // 也可以藉助函式由初始陣列生成一個新的陣列
       val arr1 = Array(1,2,3,4,5,6,7,8,9)
       val arr2 = arr.map(_*10)
       val arr3 = arr.filter(_%2==0)
      
      
  }
}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2655749/,如需轉載,請註明出處,否則將追究法律責任。

相關文章