Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

310
Vistas
¿Por qué las funciones de Kotlin Lambda no se ejecutan cuando se las llama?

En el siguiente código tengo 2 funciones: la primera envuelta en un cuerpo lambda y la otra sin él.

 fun first() = { println("first")} fun second() = println("second") first() second()

Solo las second() imprimen: ¿por qué es esto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La primera es una función que devuelve una función. Lo que sucede de hecho es que first() devuelve otra función que imprime "primero", pero no la ejecuta.

Para hacer esto, debe llamarlo agregando otro conjunto de paréntesis:

 first()() // Or val resultOfFirst = first() resultOfFirst()

Esto sucede porque el signo = para las funciones es análogo a una declaración de devolución y cuando envuelve las cosas en {} , de hecho, está creando una lambda. Por lo tanto, primero devuelve una lambda, pero no la ejecuta.

over 4 years ago · Santiago Trujillo Denunciar

0

La función first devuelve una función { println("first")} .

Llamar first() no hace nada, ni siquiera se captura su argumento de retorno.

Sin una lambda sería un equivalente, tal vez sea más fácil de entender de esta forma:

 fun firstWithoutLambda() = fun() { println("first w/o lambda")}

Para llamarlos:

 first().invoke() firstWithoutLambda().invoke()

que imprimirá los mensajes que esperaría.

Del tutorial original de Kotlin, un buen artículo: https://kotlinlang.org/docs/reference/lambdas.html

over 4 years ago · Santiago Trujillo Denunciar

0

Es muy sencillo. Verifique los tipos de esos:

 fun first(): () -> Unit = { println("first") } fun second(): Unit = println("second")

Entonces, cuando llamas first , obtienes la expresión lamda. Para invocar esta función, use .invoke() (o simplemente () ):

 first().invoke() // or first()()

El segundo es obvio: se ejecuta en la llamada.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda