1. 程式人生 > >Scala基礎

Scala基礎

images express 必須 color 編譯 區間 修飾 while循環 for

1.1. 聲明變量

package cn.itcast.scala
object VariableDemo {
  def main(args: Array[String]) {
    //使用val定義的變量值是不可變的,相當於java裏用final修飾的變量
    val i = 1
    //使用var定義的變量是可變得,在Scala中鼓勵使用val
    var s = "hello"
    //Scala編譯器會自動推斷變量的類型,必要的時候可以指定類型

    //變量名在前,類型在後
    val str: String = "itcast"
  }
}

1.2. 常用類型
Scala和Java一樣,有7種數值類型Byte、Char、Short、Int、Long、Float、Double類型和1個Boolean類型。

1.3. 條件表達式
Scala的條件表達式比較簡潔,定義變量時加上if else判斷條件。例如:

package cn.itcast.scala

object ConditionDemo {
  def main(args: Array[String]) {
    val x = 1
    //判斷x的值,將結果賦給y
    val y = if (x > 0) 1 else -1
    //打印y的值
    println(y)

    //支持混合類型表達式
    val z = if (x > 1) 1 else "error"
    //打印z的值
    println(z)

    //如果缺失else,相當於if (x > 2) 1 else ()
    val m = if (x > 2) 1
    println(m)

    //在scala中每個表達式都有值,scala中有個Unit類,用作不返回任何結果的方法的結果類型,相當於Java中的void,Unit只有一個實例值,寫成()。
    val n = if (x > 2) 1 else ()
    println(n)

    //if和else if
    val k = if (x < 0) 0
    else if (x >= 1) 1 else -1
    println(k)
  }
}

1.4. 塊表達式
定義變量時用 {} 包含一系列表達式,其中塊的最後一個表達式的值就是塊的值。

package cn.itcast.scala

object BlockExpressionDemo {
  def main(args: Array[String]) {
    val a = 10

val b = 20
    //在scala中{}中包含一系列表達式,塊中最後一個表達式的值就是塊的值
    //下面就是一個塊表達式
    val result = {

val c=b-a
val d=b-c

d   //塊中最後一個表達式的值

}
 //result的值就是塊表達式的結果
  println(result)

}
}

1.5. 循環
在scala中有for循環和while循環,用for循環比較多
for循環語法結構:for (i <- 表達式/數組/集合)

package cn.itcast.scala
object ForDemo {
  def main(args: Array[String]) {
    //for(i <- 表達式),表達式1 to 10返回一個Range(區間)

    //每次循環將區間中的一個值賦給i
    for (i <- 1 to 10)
      println(i)

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

    //高級for循環
    //每個生成器都可以帶一個條件,註意:if前面沒有分號
    for(i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()

    //for推導式:如果for循環的循環體以yield開始,則該循環會構建出一個集合

    //每次叠代生成集合中的一個值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)

  }

}

1.6. 調用方法和函數
Scala中的+ - * / %等操作符的作用與Java一樣,位操作符 & | ^ >> <<也一樣。只是有一點特別的:這些操作符實際上是方法。例如:
a + b
是如下方法調用的簡寫:
a.+(b)
a 方法 b可以寫成 a.方法(b)
1.7. 定義方法和函數1.7.1. 定義方法
技術分享圖片
方法的返回值類型可以不寫,編譯器可以自動推斷出來,但是對於遞歸函數,必須指定返回類型
技術分享圖片
1.7.2. 定義函數
技術分享圖片
1.7.3. 方法和函數的區別
在函數式編程語言中,函數是“頭等公民”,它可以像任何其他數據類型一樣被傳遞和操作,函數是一個對象,繼承自FuctionN。
函數對象有apply、curried、toString、tupled這些方法。而方法不具有這些特性。
如果想把方法轉換成一個函數,可以用方法名跟上下劃線的方式。
案例:首先定義一個方法,再定義一個函數,然後將函數傳遞到方法裏面
技術分享圖片

package cn.itcast.scala

object MethodAndFunctionDemo {
  //定義一個方法
  //方法m2參數要求是一個函數,函數的參數必須是兩個Int類型

  //返回值類型也是Int類型
  def m1(f: (Int, Int) => Int) : Int = {
    f(2, 6)
  }

  //定義一個函數f1,參數是兩個Int類型,返回值是一個Int類型
  val f1 = (x: Int, y: Int) => x + y
  //再定義一個函數f2
  val f2 = (m: Int, n: Int) => m * n

  //main方法
  def main(args: Array[String]) {

    //調用m1方法,並傳入f1函數
    val r1 = m1(f1)
    println(r1)

    //調用m1方法,並傳入f2函數
    val r2 = m1(f2)
    println(r2)
  }
}

1.7.4. 將方法轉換成函數(神奇的下劃線)
將方法轉換成函數,只需要在方法的後面加上一個下劃線

Scala基礎