[2023] Tutorial de Kotlin Parte 2 Programación funcional y orientada a objetos Capítulo 13 Piedra angular de la programación funcional: funciones de orden superior y expresiones lambda 13.2 Funciones de orden superior 13.2.2 Literales de función

[2023] Tutorial de Kotlin

inserte la descripción de la imagen aquí

Parte II Programación Funcional y Orientada a Objetos

Capítulo 13 La piedra angular de la programación funcional: funciones de orden superior y expresiones lambda

Aunque la idea de la programación funcional es tan antigua como la orientada a objetos, el lenguaje informático que soporta la programación funcional es solo una cuestión de los últimos años. Estos lenguajes incluyen Swift, Python, Java 8 y C++ 11. Como lenguaje nuevo, Kotlin también es compatible con la programación funcional.

13.2 Funciones de orden superior

La clave de la programación funcional es el soporte de funciones de orden superior. Una función se puede usar como parámetro de otra función, o devolver un valor, entonces esta función es una "función de orden superior".

13.2.2 Literales de función

Las variables de tipo función se pueden declarar, entonces, ¿qué tipo de datos pueden recibir las variables de tipo función? Es decir, cómo expresar la función literal La función literal se puede expresar de tres formas:

  • referencia de función. Referencia a una función nombrada ya definida. Se puede utilizar como un literal de función.
  • función anónima. Una función sin nombre, es decir, una función anónima, también se puede utilizar como literal de función.
  • Lambda: expresión. Las expresiones lambda son funciones anónimas que se pueden usar como literales de funciones.

Toma una castaña:

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))

}

En este código, '+' -> ::addy '-' -> ::subson referencias a funciones,

El código anterior '+' -> ::addy '-' -> ::subson referencias de función, a las que se hace referencia en forma de "dos puntos dobles más el nombre de la función". add y sub son dos funciones
locales , y sus representaciones de referencia de función son: add y: sub, que se pueden asignar a result como variable de literales de función.

El código fun(a: Int, b: Int): Int { return (a * b) }declara una función anónima. Una función anónima no necesita un nombre de función. Es una expresión directamente asignada a la variable de resultado.

La expresión Lambda utilizada por el código { a, b -> (a / b) }también se puede asignar a la variable de resultado.

¿Cómo usarlo después de obtener una variable de tipo función? La respuesta es que se puede llamar como una función .

Supongo que te gusta

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