為了更清楚之地目前函數的類型和回傳值,建議打開類型提示。
結果
高階函數是一個重要的程式設計概念,它們在許多現代程式語言中都有支援,包括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
的概念與其他一些程式語言中的 lambda expressions
或 anonymous functions
類似。Closures 是一種函數,它可以捕獲和操作其周圍作用域中的變數。
這意味著 closures 具有以下特點: