參考官方文檔:
https://developer.android.google.cn/codelabs/basic-android-kotlin-compose-function-types-and-lambda?hl=zh-cn#0
1、 將函數存儲在變量中
- 作為一種一級結構,函數也屬于數據類型,因此,可以將函數存儲在變量中、將函數傳遞到函數,以及從函數返回函數。
- 如需將函數作為值引用,您需要使用函數引用運算符 :: 。
fun main() {val trickFunction = ::trick}fun trick() {println("No treats!")}
2、使用 lambda 表達式定義函數
-
lambda 表達式提供了簡潔的語法來定義函數,無需使用 fun 關鍵字。您可以直接將 lambda 表達式存儲在變量中,無需對其他函數進行函數引用。語法圖如下:
-
使用 lambda 表達式定義函數時,有一個引用該函數的變量。還可以像對待任何其他類型一樣,將其值分配給其他變量,并使用新變量的名稱調用該函數。
fun main() {val trickFunction = trick// 調用方式trick()trickFunction()}val trick = {println("No treats!")}
- 在 main() 函數中,移除函數引用運算符 ::,因為 trick 現在引用的是變量,而不是函數名稱。
- 在 main() 函數中,調用 trick() 函數,但這次要包含圓括號,就像您在調用任何其他函數時所做的那樣。
- 同理,將 trickFunction 變量視為函數進行調用。
- 借助 lambda 表達式,您可以創建用于存儲函數的變量,像調用函數一樣調用這些變量,并將其存儲在其他可以像函數一樣調用的變量中。
3、將函數用作數據類型
- 函數類型由一組圓括號組成,其中包含可選的參數列表、-> 符號和返回值類型。語法如下圖所示:
val treat: () -> Unit = {println("Have a treat!")}
- treat 變量的數據類型為 () -> Unit,圓括號為空,因為函數沒有任何參數;返回值類型為 Unit,因為函數不返回任何內容。如果您的參數接受兩個 Int 參數并返回 Int,則其數據類型為 (Int, Int) -> Int。
4、將函數用作返回值類型
- 函數是一種數據類型,因此您可以像使用任何其他數據類型一樣使用函數。您甚至可以從其他函數返回函數。語法如下圖所示:
fun trickOrTreat(isTrick: Boolean): () -> Unit {if (isTrick)