Scala快速入門-基礎


HelloWorld

從HelloWorld開始,使用scala IDE編輯器。

  • 新建scala project
  • 新建scala object
  • 編寫HelloWorld
  • run as scala application
object HelloWorld {
  
  def main(args: Array[String]){
    println("Hello world")
  }
}

表達式和值

scala中,幾乎所有的元素都是表達式,以val定義常量,var定義變量

函數

可以使用def來定義一個函數。函數體是一個表達式。
使用Block表達式的時候,默認最后一行的返回是返回值,如果不是遞歸函數,無需顯式指定。
函數還可以像值一樣,賦值給var或val。因此函數也可以作為參數傳給另一個函數

//定義函數,函數參數要指定類型簽名
def square(a: Int) = a * a
def squareWithBlock(a: Int) = {
    a * a
}
//定義匿名函數,匿名函數由參數列表,箭頭連接符和函數體組成
val squareVal = (a: Int) => a * a

def addOne(f: Int => Int, arg: Int) = f(arg) + 1

println("square(2):" + square(2))
println("squareWithBlock(2):" + squareWithBlock(2))
println("squareVal(2):" + squareVal(2))
println("addOne(squareVal,2):" + addOne(squareVal, 2))

執行結果:

square(2):4
squareWithBlock(2):4
squareVal(2):4
addOne(squareVal,2):5

def log(msg: => String)按名稱傳遞,參數只有在實際使用時才計算

使用class定義類,使用new生成類,構造函數不是特殊的方法,他們是除了類的方法定義之外的代碼

class Calculator(brand: String) {
  /**
   * A constructor.
   */
  val color: String = if (brand == "TI") {
    "blue"
  } else if (brand == "HP") {
    "black"
  } else {
    "white"
  }

  // An instance method.
  def add(m: Int, n: Int): Int = m + n
}
val calc = new Calculator("HP")
calc.color

特質(trait)

特質類似於java中interface,但trait則可以定義方法體,通過with關鍵字,一個類可以擴展多個特質:
在scala中重寫一個方法是需要指定override關鍵詞的。如果重寫一個方法時,沒有加上override關鍵詞,那么scala編譯會無法通過。

trait Friendly {
  def greet() = "Hi"
}

class Dog extends Friendly {
  override def greet() = "Woof"
}

class HungryDog extends Dog {
  override def greet() = "I'd like to eat my own dog food"
}

trait ExclamatoryGreeter extends Friendly {
  override def greet() = super.greet() + "!"
}

var pet: Friendly = new Dog
println(pet.greet())

pet = new HungryDog
println(pet.greet())

pet = new Dog with ExclamatoryGreeter
println(pet.greet())

pet = new HungryDog with ExclamatoryGreeter
println(pet.greet())

result:
Woof
I'd like to eat my own dog food
Woof!
I'd like to eat my own dog food!

類型

泛型,可以到用方括號語法引入的類型參數

object

scala中沒有靜態方法和屬性,全部由singleton object(單例對象)來替代

參考文獻

http://zh.scala-tour.com/#/welcome
http://twitter.github.io/scala_school/zh_cn/index.html
first step to scala
A Tour of Scala

廣告

點擊Spark加入群Spark,分享更多Spark相關信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM