今天開始學習kotlin的第二大思想,函式式程式設計。
函式式程式設計在中一切都是函式。核心概念:
函式和其它資料型別是一樣的,可以作為其它函式的引數傳入,也可做為函式的返回值。
使用表示式,不用語句。
高階函式:乙個函式可做為另乙個函式的引數和返回值
無***:函式執行過程會返回乙個結果,不會修改外部變數
函式式程式設計的關鍵是支援高階函式,就是說乙個函式可以做為另乙個函式引數或者返回值。
先看一下什麼是函式型別,在kotlin中每個函式都有乙個型別,稱為函式型別,函式型別是中資料型別
fun main(args: array)
fun add(a: int, b: int): int
第三行中的 (int, int) -> int 就是函式型別,意思宣告乙個屬性型別為函式型別。(int, int) 說明這個函式要滿足,兩個int引數 -> int 是指返回值是int型別。
(引數:引數型別)->返回值型別 引數可以有多個,也可以沒有就省略。
fun main(args: array)
fun test()
這是無返回值的函式,如果,不學返回值預設為無返回值。
函式型別可以宣告的變數就是函式字面量函式字面量可以接收三種型別的資料型別。
fun main(args: array)
fun add(a: int, b: int): int
fun sub(a: int, b: int): int
var ride = fun(a: int, b: int): int
var divide =
把乙個函式做另乙個函式的返回值使用,這個函式就是高階函式。函式引數fun main(args: array)
fun getfun(string: string): (int, int) -> int
}return a
}fun add(a: int, b: int): int
fun sum(a: int, b: int): int
fun main(args: array)
fun setfun(funname: (int, int) -> int)
fun add(a: int, b: int): (int, int) -> int
}
lambda表示式是一種匿名函式,它可以做表示式、函式、引數和返回值用剛才的案例可以改為lambda表示式用fun main(args: array) )
}fun setfun(funname: (int, int) -> int)
fun add(a: int, b: int): (int, int) -> int
}
或者在簡寫不寫引數型別,因為有時候可以自動推到型別lambda
如果函式最後乙個是lambda的時候就可以放到小括號外面fun main(args: array)
}fun setfun(funname: (int, int) -> int)
fun main(args: array) )
}fun getstring(s: string, funname: (string) -> string)
在lambda直接使用return會使函式直接退出,而不是退出lambda表示式。fun main(args: array)
fun getstring(s: string)
println("lambda")
}println("函式退出")
}
沒有列印出 函式退出,證明它直接結束了函式,而非lambda表示式。我們用之前學的知識改一下結果:fun main(args: array)
fun getstring(s: string)
println("lambda")
}println("函式退出")
}
這次看到了,說明是結束的lambda表示式閉包使一種特殊的函式,它可以訪問函式體之外的變數結果:fun main(args: array)
fun test(): (int) -> int
return ::add
}
可以看到,結果是累加了,這就是閉包捕獲變數。這些變數會被儲存到乙個特殊的容器中,即使超過作用域在閉包體中也可以訪問到。待補充一 函式式程式設計
將業務 直接寫死 裡 將單一維度的條件作為引數傳入方法中,方法內根據引數進行業務邏輯實現。將多個維度的條件作為引數傳入方法中,業務實現需要根據不同的引數處理不同的邏輯。將業務邏輯封裝為乙個實體類,方法接受實體類為引數,方法內部呼叫實體類的處理邏輯。呼叫方法時不再建立實體類,而是使用匿名函式的形式替代...
kotlin函式式表示式
kotlin函式式表示式 當函式返回單個表示式時,可以省略花括號並且在 符號之後指定 體即可 fun double x int int x 2kotlin 當返回值型別可由編譯器推斷時,顯式宣告返回型別是可選的 fun double x int x 2 lambda 表示式的完整語法形式,即函式型別...
Scala函式式程式設計(一)
package pxl.basics import sun.security.util.length 使用alt 可以自動補全 def 後面就可以看成函式 函式是一等公民,可以像變數一樣被傳遞,被賦值 並且函式和變數之間可以賦值傳遞,可以把函式當成乙個變數 函式可以被序列化和反序列化 1.函式可以在...