Kotlin 函式式程式設計 一

2021-09-13 18:25:32 字數 3103 閱讀 8339

今天開始學習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

fun main(args: array) 

}fun setfun(funname: (int, int) -> int)

如果函式最後乙個是lambda的時候就可以放到小括號外面

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.函式可以在...