在這個頁面中,我們將介紹Scala的基礎知識。
你可以在瀏覽器中的ScalaFiddle執行Scala。
開啟https://scalafiddle.io
#在左窗格中貼上println("Hello, world!")
點選「執行」按鈕。 輸出顯示在右窗格中。
這是一個簡單的,零設定的方式來測試Scala程式碼片段。
表達式是可計算的語句。
1 + 1
你可以使用 println
輸出表達式的結果。
println(1) // 1 println(1 + 1) // 2 println("Hello!") // Hello! println("Hello," + " world!") // Hello, world!
你可以使用 val
關鍵字來命名表達式的結果。
val x = 1 + 1println(x) // 2
命名結果,例如這裡的 x
,稱為值。引用一個值並不會重新計算它。
值不能被重新指派。
val x = 1 + 1x = 3 // This does not compile.
編譯器可以推斷出類型的值,但是您也可以明確地聲明類型,如下所述:
val x: Int = 1 + 1
注意,類型聲明Int
是在標識符x
之後出現的,並且還需要在兩者之間添加一個:
。
變數就像值,但你可以重新分配它們。你可以使用 var
關鍵字定義一個變數。
var x = 1 + 1x = 3 // This compiles because "x" is declared with the "var" keyword. println(x * x) // 9
與值一樣,你可以明確地宣告類型:
var x: Int = 1 + 1
你可以把周圍的表達式結合起來。我們稱這個為程式碼塊。
區塊的最後一個表達式的結果也是整個區塊的結果。
println({ val x = 1 + 1 x + 1 }) // 3
函數是帶參數的表達式。
你可以定義一個匿名函數(也就是沒有名稱),它回傳一個給定的整數+1:
(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
注意傳回類型是在參數清單和冒號 : Int
之後宣告的。
方法可以使用多個參數清單。
def addThenMultiply(x: Int, y: Int)(multiplier: Int): Int = (x + y) * multiplier println(addThenMultiply(1, 2)(3)) // 9
或根本沒有參數列表。
def name: String = System.getProperty("name") println("Hello, " + name + "!")
還有一些其他的區別,但現在,你可以把它們看作是類似函數的東西。
方法也可以有多行表達式。
def getSquareString(input: Double): String = { val square = input * input square.toString }
body
的最後一個表達式是該方法的回傳值。 (Scala有一個回傳關鍵字return
,但很少用到。)
你可以使用類別關鍵字class
定義類,然後使用它的名稱和建構函數參數。
class Greeter(prefix: String, suffix: String) { def greet(name: String): Unit = println(prefix + name + suffix) }
方法 greet
的回傳類型是 Unit
,它表示回傳沒有任何意義。它類似於Java和c中的關鍵字void
(不同之處在於,因為每個Scala表達式都必須有一定的值,所以實際上有一個類型Unit
的單例值,寫為()
。
val greeter = new Greeter("Hello, ", "!") greeter.greet("Scala developer") // Hello, Scala developer!
之後我們將詳細介紹類別。 範例類別
Scala有一種特殊類型的類,稱為「範例」類別。預設情況下,範例類別是不可變的,並按值進行比較。
關鍵字定義範例類別。
case class Point(x: Int, y: Int)
您可以不需要使用 new
關鍵字來實例化範例類別。
val point = Point(1, 2) val anotherPoint = Point(1, 2) val yetAnotherPoint = Point(2, 2)
它們是按值進行比較的。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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.</pre><div class="contentsignin">登入後複製</div></div>
我們想要介紹的範例類別還有很多,我們相信你會愛上它們的!之後我們將詳細介紹它們。
物件
物件是它們自己定義的單一實例。你可以把他們想像成他們自己的類別的單例。
來定義物件。
object IdFactory { private var counter = 0 def create(): Int = { counter += 1 counter } }
你可以透過引用物件名稱來存取一個物件。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">val newId: Int = IdFactory.create()
println(newId) // 1
val newerId: Int = IdFactory.create()
println(newerId) // 2</pre><div class="contentsignin">登入後複製</div></div>
稍後我們將詳細介紹物件。
特質
特徵是包含某些欄位和方法的型別。多個特徵可以組合在一起。
來定義特質。
trait Greeter { def greet(name: String): Unit }
特徵也可以有預設的實作。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">trait Greeter {
def greet(name: String): Unit =
println("Hello, " + name + "!")
}</pre><div class="contentsignin">登入後複製</div></div>
您可以使用
關鍵字擴充特性,並使用
override 關鍵字覆寫實作。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">class DefaultGreeter extends Greeter
class 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?</pre><div class="contentsignin">登入後複製</div></div>
在這裡,DefaultGreeter
只擴展了一個單一的特質,但是它可以擴展多個特質。
稍後我們將詳細介紹特質。 主方法
主方法是一個程式的入口點。 Java虛擬機需要一個命名為
main使用對象,您可以定義一個主方法,如下:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">object Main {
def main(args: Array[String]): Unit =
println("Hello, Scala developer!")
}</pre><div class="contentsignin">登入後複製</div></div>
<p> </p>
<p class="article fmt article__content"><br></p>
<p><br></p>
<p class="comments-box-content"></p>
以上是[Scala之旅]2-基礎 - TOUR OF SCALA的詳細內容。更多資訊請關注PHP中文網其他相關文章!