Scala函數語言程式設計(一)
阿新 • • 發佈:2018-11-17
package PXL.basics
import sun.security.util.Length
/***
* 使用Alt + /可以自動補全
* def 後面就可以看成函式
* 函式是一等公民,可以像變數一樣被傳遞,被賦值;並且函式和變數之間可以賦值傳遞,可以把函式當成一個變數
* 函式可以被序列化和反序列化
* 1. 函式可以在分散式系統上傳遞
* 2. 背後是類和物件,可以如變數一樣做任何事情
* 關於函式的幾個要點:
* 1. def關鍵字定義
* 2. 函式自動進行型別推斷,最後一條語句
* 3. 如果函式名稱和函式體之間沒有等於號= 則函式型別推斷失效,此時型別為Unit
* 4. 如果函式體中無法推到出函式的型別,必須宣告具體的型別 ,例如fib函式
* 5. 函式的引數可以有預設值
* 6. 函式不確定傳入的引數個數,使用變長的方式(num:Int*)
* 7. 可以使用1 to 10 : _*的方式傳入引數
* 8. 可變引數會被收整合為陣列,入口函式main的可變引數是以Array[String]方式呈現的
*
*/
object function001 {
def main(args: Array[String]): Unit = {
hello("spark",23)
println(hello("pxl",23))//函式可以作為引數(變數傳遞給函式)
println("fib num of 10 is "+fib(10))
println("sum = "+sum( 1 to 10 : _* ))
println("sumall = "+sumall( 1 to 10 : _* ))
}
def hello(name:String,age:Int)={
println("my name is : " +name)
println("my age is : "+age)
age//此時函式返回的型別為int
}
def fib(n:Long):Long={
if(n<=1) 1
else
fib(n-2)+fib(n-1)
}
def sum(num:Int*)={
var result = 0
for (nu<-num) result += nu//加號和等號不可以有空格
result //沒有這句的話不返回任何值
}
//可變引數遞迴實現累加
def sumall(num:Int*):Int = {
if (num.length==0) 0
else num.head + sumall(num.tail: _*)//tail其餘的元素是一個seq,使用:_*變成可以傳入的形式
}
}