scala筆記-函式入門(3)
阿新 • • 發佈:2018-11-08
函式的定義與呼叫
在Scala中定義函式時,需要定義函式的函式名、引數、函式體。 我們的第一個函式如下所示:
def sayHello(name: String, age: Int) = {
if (age > 18) { printf("hi %s, you are a big boy\n", name); age }
else { printf("hi %s, you are a little boy\n", name); age
}
sayHello("leo", 30)
Scala要求必須給出所有引數的型別,但是不一定給出函式返回值的型別,只要右側的函式體中不包含遞迴的語句,Scala就可以自己根據右側的表示式推斷出返回型別。
在程式碼塊中定義包含多行語句的函式體
單行的函式:
def sayHello(name: String) = print("Hello, " + name)
如果函式體中有多行程式碼,則可以使用程式碼塊的方式包裹多行程式碼,程式碼塊中最後一行的返回值就是整個函式的返回值。與Java中不同,不是使用return返回值的。 比如如下的函式,實現累加的功能:
def sum(n: Int) = {
var sum = 0;
for(i <- 1 to n) sum += i
sum
}
遞迴函式與返回型別
如果在函式體內遞迴呼叫函式自身,則必須手動給出函式的返回型別。 例如,實現經典的斐波那契數列:
9 + 8; 8 + 7 + 7 + 6; 7 + 6 + 6 + 5 + 6 + 5 + 5 + 4; ....
def fab(n: Int): Int = {
if(n <= 1) 1
else fab(n - 1) + fab(n - 2)
}