1. 程式人生 > >scala筆記-函式入門(3)

scala筆記-函式入門(3)

函式的定義與呼叫

在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)
}