1. 程式人生 > >Scala函數語言程式設計(一)

Scala函數語言程式設計(一)

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,使用:_*變成可以傳入的形式 } }