Scala教程之:Scala基础
文章目錄
- 常量
- 變量
- 代碼塊
- 函數
- 方法
- 類
- case類
- 對象
- trait
- main方法
這篇文章我們大概過一下Scala的基礎概念,后面的文章我們會有更詳細的講解Scala的具體內容。
常量
在Scala中常量用val關鍵字表示,如下所示:
val x = 1 + 1 println(x) // 2常量只能賦值一次,不能被多次賦值:
x = 3 // This does not compile.在上面的例子中,x 的類型是根據后面的類型推算出來的,當然你也可以顯示指定x的類型,如下所示:
val x: Int = 1 + 1變量
變量和常量相比可以重新賦值,變量可以用var來定義。
var x = 1 + 1 x = 3 // This compiles because "x" is declared with the "var" keyword. println(x * x) // 9同樣的,你可以顯示指定變量的類型:
var x: Int = 1 + 1代碼塊
在scala中,代碼塊用{}表示,在代碼塊中最后一個表達式的結果就是整個塊的結果,可以作為返回值來使用。
println({val x = 1 + 1x + 1 }) // 3函數
Scala的函數和java中的lambda表達式類似,它是一個帶有參數的表達式。你可以定義匿名函數或者命名函數,如下所示:
(x: Int) => x + 1 val addOne = (x: Int) => x + 1 println(addOne(1)) // 2函數還可以帶多個參數:
val add = (x: Int, y: Int) => x + y println(add(1, 2)) // 3或者不帶參數:
val getTheAnswer = () => 42 println(getTheAnswer()) // 42方法
方法跟函數很類似,不同的是方法由def關鍵字來定義,def后面跟著一個名字、參數列表、返回類型和方法體。
def add(x: Int, y: Int): Int = x + y println(add(1, 2)) // 3和函數不同的是,scala的方法還可以接受多個參數列表:
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier println(addThenMultiply(1, 2)(3)) // 9或者沒有參數列表:
def name: String = System.getProperty("user.name") println("Hello, " + name + "!")如果方法的內容比較多的話,可以使用{}來表示多行。
def getSquareString(input: Double): String = {val square = input * inputsquare.toString } println(getSquareString(2.5)) // 6.25在代碼塊中我們講到,最后一個表達式就是代碼塊的返回值,這里
返回值就是square.toString。 雖然在scala中也有return這個關鍵字,但是我們很少用到。
類
Scala的類用class關鍵字表示,后面跟著類的名字和構造函數:
class Greeter(prefix: String, suffix: String) {def greet(name: String): Unit =println(prefix + name + suffix) }類里面我們定義了一個方法greet,它的返回值是Unit,可以看成是java中的void。
你可以使用new關鍵詞來創建類的實例:
val greeter = new Greeter("Hello, ", "!") greeter.greet("Scala developer") // Hello, Scala developer!case類
scala中有一種專門用來做比較的類叫做case class:
case class Point(x: Int, y: Int)case class可以不用new來實例化:
val point = Point(1, 2) val anotherPoint = Point(1, 2) val yetAnotherPoint = Point(2, 2)他們的值可以做比較:
if (point == anotherPoint) {println(point + " and " + anotherPoint + " are the same.") } else {println(point + " and " + anotherPoint + " are different.") } // Point(1,2) and Point(1,2) are the same.if (point == yetAnotherPoint) {println(point + " and " + yetAnotherPoint + " are the same.") } else {println(point + " and " + yetAnotherPoint + " are different.") } // Point(1,2) and Point(2,2) are different.對象
對象使用object來定義的,對象可以看成是它自己類的單例。
object IdFactory {private var counter = 0def create(): Int = {counter += 1counter} }你可以通過引用它的名字來訪問一個對象。
val newId: Int = IdFactory.create() println(newId) // 1 val newerId: Int = IdFactory.create() println(newerId) // 2trait
trait是包含某些字段和方法的類型。使用trait關鍵字來定義,它和java的接口很類似:
trait Greeter {def greet(name: String): Unit }trait可以有默認的實現:
trait Greeter {def greet(name: String): Unit =println("Hello, " + name + "!") }trait可以使用extends來繼承,并使用override來覆蓋默認的實現:
class DefaultGreeter extends Greeterclass CustomizableGreeter(prefix: String, postfix: String) extends Greeter {override def greet(name: String): Unit = {println(prefix + name + postfix)} }val greeter = new DefaultGreeter() greeter.greet("Scala developer") // Hello, Scala developer!val customGreeter = new CustomizableGreeter("How are you, ", "?") customGreeter.greet("Scala developer") // How are you, Scala developer?main方法
和java一樣,scala的main方法也是程序運行的入口。Scala 中的 main 方法是 def main(args: Array[String]),而且必須定義在 object 中。如下所示:
object Main {def main(args: Array[String]): Unit =println("Hello, World!") }除了自己寫main方法以外,還可以繼承App traits,然后將業務邏輯直接寫在構造函數中,同時可以使用args來接收參數。如下所示:
object Test extends App {if(args.length >0 ){println("hello "+ args(0))}else{println("Hello world")} }更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的Scala教程之:Scala基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala教程之:面向对象的scala
- 下一篇: Scala教程之:函数式的Scala