第二週
這一週的內容主要圍繞着“函數”來進行。本來想順着書的內容往下講,不過那樣就沒有自己的東西了,所以,就想到哪裏寫到哪裏吧~
我們從一個最普通的函數開始。它的作用跟函數名一樣,你給它輸入什麼,它給你返回什麼。
def echo(x : Int) : Int = {
x
}
在語法上:
- 函數定義以def開頭。
- 函數的返回值類型在函數名之後。
- 注意那個等號。
- 不需要顯式的寫return。(請問是爲什麼呢)
當然,這個例子只是爲了引出接下來的例子,因爲普通的版本,只能接受Int作爲輸入和輸入,如果要支持任意類型,就需要讓函數支持泛型。
def echo[T](x : T) : T = {
x
}
通過在函數名之後的中括號和T,可以支持單個參數的泛型,如果要支持多個,可以寫成類似[T, V]的形式。
好了,水完跟Java類似的部分,下面講講Scala做得好的部分。
相信你一定見過這樣的代碼,把一個字符串類型的日期,轉換爲Date,通常會根據不同的合適進行適配,比如20201226和2020-12-26。通常大部分日期格式都是第二種,因此會定義2個函數,一個需要str和pattern 2個參數,一個只需要str一個參數。
但是,在Scala中,你可以通過一個帶默認值的函數來完成Java裏2個函數的功能。
def str2Date(str : String, pattern : String = "yyyy-MM-dd") : Date = {
…
}
str2Date("20201226", "yyyy-MM-dd")
str2Date("2020-12-26")
在語法上,通過pattern參數後面加一個等號來完成。