Scala 程式設計基礎
阿新 • • 發佈:2018-11-03
1 表示式
表示式是可計算的語句。
1 + 1
"ss" + "gg"
常量
使用val為表示式的結果命名。
val x = 1 + 1
引用常量不需要重計算表示式。
常量不能被重賦值。
常量型別可以被推匯出,也可以顯式指定型別。
# 顯式指定常量型別
val x:Int = 1 + 1
變數
變數與常量相似,只不過變數可以被重賦值。
使用var定義變數。
var與val一樣,也可以顯式指定型別。
var t:Int = 1 + 2
t = 12
println(t)
2 塊
可以使用塊將表示式結合。
塊中最後一個表示式的結果也是整個塊的結果。
println({
var x = 1 + 4
x + 666
})
3 函式
函式是帶引數的表示式。
可以使用匿名函式,也可以為函式命名。
函式可以有多個引數,可以沒有引數。
# 匿名函式
(x: Int) => x + 1
# 命名函式
var ff = (x:Int, y:Int)=>x + y
println(ff(12, 24))
# 無參函式
val cc = ()=> 1
println(cc())
4 方法
方法使用def關鍵字定義,def之後是方法名、引數列表、返回值型別與方法體。
方法可以有單個引數列表,也可以有多個引數列表,也可以沒有引數列表。
方法可以有也可以有多行表示式。最後一行是方法的返回值,雖然Scala也有return關鍵字,但是很少使用。
# 方法定義 def add(x: Int, y: Int): Int = x + y # 方法定義(多個引數列表) def mu(x: Int, y: Int)(multiplier:Int): Int = (x+y)*multiplier println(mu(1,2)(3)) # 方法定義(沒有引數列表) def name:String = System.getProperty("user.name") println(name) # 方法定義(多行表示式) def getS(input: Double): String = { val s = input * input s.toString }
5 類
使用class關鍵字定義類,class之後是類名與構造器引數。
# 定義類
class Greeter(pre:String, suf: String) {
def greet(name:String): Unit = {
println(pre + name + suf)
}
}
方法返回型別Unit類似於Java與C中的void。
每個Scala表示式必須包含值,Unit型別存在一個單例值,written()。此值不攜帶任何資訊。
可以使用new關鍵字建立類例項
# 建立類例項
val getter = new Greeter("Hello, ","!" )
getter.greet("Scala developer")
6 樣例類
Scala具有一個特殊型別的類稱之為"樣例"類。預設情況下,樣例類是不可改變的並且通過值進行比較。可以使用case class關鍵字定義樣例類。
# 定義樣例類
case class Point(x: Int, y:Int)
# 例項化樣例類(不需要new關鍵字)
val po = Point(1, 2)
val an = Point(1, 2)
var ye = Point(2, 2)
# 樣例類通過值進行比較
println(po == an)
println(ye == an)
7 物件
物件是自身定義的單個例項,可以看作是自身類的單例。
可以使用object關鍵字定義物件。
可以使用物件的名稱訪問物件。
# 物件定義
object IdFactory {
private var counter = 0
def create(): Int = {
counter += 1
counter
}
}
# 訪問物件
val newId:Int = IdFactory.create()
println(newId)
8 特質
特質是包含某些欄位與方法的型別。多個特質可以組合在一起。
使用trait關鍵字定義特質。
對類使用extend關鍵字,可以擴充套件特質,並且使用override關鍵字可以重寫特質中的方法實現。
類可以擴充套件多個特質。
# 定義特質
trait Gre {
def greet(name: String):Unit
}
# 定義特質(方法具有預設實現)
trait Gre {
def greet(name: String):Unit =
println("Hello, " + name + "!")
}
# 擴充套件特質
class De extends Gre
# 擴充套件特質(重寫方法)
class Cus (pre:String, post: String) extends Gre{
override def greet(name: String): Unit = {
println(pre + name + post)
}
}
9 主方法
主方法是程式的進入點。JVM要求主方法被命名為main,並且具有一個字串陣列引數。
object Main {
def main(args: Array[String]):Unit =
println("Hello, Scala Developer!")
}