打開類型提示

為了更清楚之地目前函數的類型和回傳值,建議打開類型提示。

enable inlay hints.png

結果

inlay_hints_result.png

介紹

高階函數是一個重要的程式設計概念,它們在許多現代程式語言中都有支援,包括Kotlin、JavaScript和Swift等。高階函數的特點是它們可以接受其他函數作為參數,或者將函數作為結果返回,甚至可以將函數存儲在數據結構中。

接受函數作為參數

高階函數能夠接受一個或多個函數作為參數。

public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {
    ...
}

返回函數

高階函數可以將函數作為其結果返回。

fun createFilter(isValid: (Int) -> Boolean): (List<Int>) -> List<Int> {
    return { list -> list.filter(isValid) }
}

val isEvenFilter: (List<Int>) -> List<Int> = createFilter { it % 2 == 0 }
val isOddFilter: (List<Int>) -> List<Int> = createFilter { it % 2 != 0 }

val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val evenNumbers = isEvenFilter(numbers)
val oddNumbers = isOddFilter(numbers)

存儲函數

高階函數可以將函數存儲在數據結構中

val operations = listOf(
    { x: Int -> x * 2 },
    { x: Int -> x + 5 },
    { x: Int -> x / 3 }
)
var result = 10
for (operation in operations) {
    result = operation(result)
}

Closures

closures 的概念與其他一些程式語言中的 lambda expressionsanonymous functions 類似。Closures 是一種函數,它可以捕獲和操作其周圍作用域中的變數。

這意味著 closures 具有以下特點:

  1. 捕獲外部變數: Closures 可以訪問並修改其外部函數作用域中的變數。這使得 closures 在函數式編程中非常有用,因為它們可以將狀態和行為封裝在一個函數中。