[2023] Tutorial Kotlin
Diretório de artigos
Parte II Programação Orientada a Objetos e Funcional
Capítulo 13 A pedra angular da programação funcional — funções de ordem superior e expressões lambda
Embora a ideia de programação funcional seja tão antiga quanto a orientada a objetos, a linguagem de computador que suporta a programação funcional é apenas uma questão dos últimos anos. Essas linguagens incluem Swift, Python, Java 8 e C++ 11. Como uma nova linguagem, Kotlin também suporta programação funcional.
13.2 Funções de ordem superior
A chave para a programação funcional é o suporte de funções de ordem superior. Uma função pode ser usada como parâmetro de outra função, ou retornar um valor, então esta função é uma "função de ordem superior".
13.2.2 Literais de função
Variáveis de tipo de função podem ser declaradas, então que tipo de dados as variáveis de tipo de função podem receber? Ou seja, como expressar o literal de função. O literal de função pode ser expresso de três maneiras:
- referência de função. Referência a uma função nomeada já definida. Pode ser usado como um literal de função.
- função anônima. Uma função sem nome, ou seja, uma função anônima, também pode ser usada como literal de função.
- Lambda: expressão. As expressões lambda são funções anônimas que podem ser usadas como literais de função.
Pegue uma castanha:
fun calculate(opr: Char): (Int, Int) -> Int {
// 加法函数
fun add(a: Int, b: Int): Int {
return a + b
}
// 减法函数
fun sub(a: Int, b: Int): Int {
return a - b
}
val result: (Int, Int) -> (Int) =
when (opr) {
'+' -> ::add
'-' -> ::sub
'*' -> {
// 乘法匿名函数
fun(a: Int, b: Int): Int {
return (a * b)
}
}
else -> {
a, b -> (a / b) } // 触发Lambda 表达式
}
return result
}
fun main() {
val f1 = calculate('+')
val f2 = calculate('-')
val f3 = calculate('*')
val f4 = calculate('/')
println(f1(10, 5))
println(f2(10, 5))
println(f3(10, 5))
println(f4(10, 5))
}
Neste código, '+' -> ::add
e '-' -> ::sub
são referências de função,
O código acima '+' -> ::add
e '-' -> ::sub
são referências de função, que são referenciadas na forma de "dois pontos mais o nome da função". add e sub são duas funções
locais , e suas representações de referência de função são: add e: sub, que podem ser atribuídas ao resultado como variável de literais de função.
O código fun(a: Int, b: Int): Int { return (a * b) }
declara uma função anônima. Uma função anônima não precisa de um nome de função. É uma expressão atribuída diretamente à variável de resultado.
A expressão Lambda usada pelo código { a, b -> (a / b) }
também pode ser atribuída à variável de resultado.
Como utilizá-lo após obter uma variável do tipo função? A resposta é que ela pode ser chamada como uma função .