Scala基礎
阿新 • • 發佈:2018-07-30
images express 必須 color 編譯 區間 修飾 while循環 for 1.1. 聲明變量
1.3. 條件表達式
Scala的條件表達式比較簡潔,定義變量時加上if else判斷條件。例如:
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類型。
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基礎