[2023] Tutorial Kotlin Parte 2 Programação orientada a objetos e funcional Capítulo 13 Programação funcional Pilar - funções de ordem superior e expressões lambda 13.2 Funções de ordem superior 13.2.2 Literais de função

[2023] Tutorial Kotlin

insira a descrição da imagem aqui

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, '+' -> ::adde '-' -> ::subsão referências de função,

O código acima '+' -> ::adde '-' -> ::subsã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 .

Acho que você gosta

Origin blog.csdn.net/weixin_44226181/article/details/130024446
Recomendado
Clasificación