Literales de función con receptor en Kotlin

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:

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:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *