En Kotlin, las funciones son ciudadanos de primera clase. Significa que las funciones pueden asignarse a las variables, pasarse como argumento o devolverse desde otra función. Si bien Kotlin tiene tipos estáticos, para que sea posible, las funciones deben tener un tipo. Existe y se llama tipo de función y estas son:
- val deseo:()->Unidad
- valor suma: (Int)->Int
- val algo:()->()->Unidad
Requisitos previos para este artículo:
- Funciones en Kotlin
- Referencias de funciones en Kotlin
- Idea básica del Receptor en Kotlin
La función de referencia es un ejemplo de reflexión. Devuelve una referencia a la función que también implementa una interfaz que representa un tipo de función. Es por eso que se puede usar de esta manera. Generalmente, literal en programación es un cubo de azúcar sintáctico para representar valores de algunos tipos que el lenguaje considera particularmente importantes. Por lo tanto, el literal de función es una notación especial que se usa para simplificar cómo se define una función. Hay dos tipos de literales de función en Kotlin:
- Expresión lambda (es una forma corta de definir una función).
- Función anónima (es una forma alternativa de definir una función).
Introducción
Un literal de función es una función que no se declara pero que se pasa como una expresión. Las funciones lambdas y anónimas son literales de funciones. En Kotlin, podemos llamar a una función literal con un objeto receptor, y podemos llamar a métodos en el objeto receptor dentro del cuerpo de la función literal, como funciones de extensión. En este artículo, aprenderemos cómo usar funciones literales con receptores.
Ejemplo: siga estos pasos para comprender los literales de funciones:
Comencemos con un literal de función simple en una string, que devuelve una string agregada a la string receptora:
Kotlin
fun main (args: Array<String>) { var s = "gonna do " val addS = fun String. (successor: String) : String { return this + successor } s = s . addS ("nothing much.") printIn (s) }
Un literal de función tiene acceso al receptor al que ha sido llamado y puede acceder a los métodos asociados con ese receptor. También podemos pasar el receptor como parámetro en una función ordinaria, donde el primer parámetro es para un receptor. Esto puede ser útil en escenarios donde necesitamos usar una función ordinaria, So String. (String) -> Int es similar a (String, String) -> Int es compatible. Mira el siguiente ejemplo:
Kotlin
fun main (args: Array<String>) { var s = "gonna do " val addS = fun String. (successor: String) : Int { return this . length + successor . length } var x = s. addS ("nothing much.") printin (x) fun testIfEqual (op: (String, String) -> Int, a: String, b:String, c: Int) = assert (op (a, b) == c) test IfEqual (addS, "gonna do ","nothing much. ", s . length + "nothing much.". length) }
Si se puede inferir el tipo de receptor, se puede usar lambda como el literal de la función. Básicamente, podemos llamar a una función literal en un objeto receptor, y dentro del cuerpo de la función, podemos acceder y llamar a métodos en un objeto receptor, similar a una función de extensión en Kotlin. La siguiente es la sintaxis para esto:
receptor functionLliteral (argumentos) -> ReturnType
Publicación traducida automáticamente
Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA