Kotlin: cuándo y cómo se deben usar las expresiones Lambda

Últimamente me he mudado a Kotlin para mis proyectos de Android y tengo problemas para entender el Lambdas. Cuando convertimos un file Java en un file Kotlin vemos muchas expresiones lambda.

¿Cuándo y cómo debe uno exactamente usar una function lambda? Además, ¿cuál es la diferencia entre una function de order superior y una function / expresión lambda?

Las respuestas específicamente en context a Android serían útiles.

¿Cuándo y cómo debe uno exactamente usar una function lambda? Además, ¿cuál es la diferencia entre una function de order superior y una function / expresión lambda?

Una lambda es una function anónima. Le permite escribir sin nombrarlos.

Una function de order superior es una function que toma otra function como argumento (a menudo se pasa como una lambda ) o devuelve una como resultado.

Es difícil decirle cuándo debe usarse realmente una lambda. Como ya se vio, las funciones de order superior son probablemente el caso de uso principal. Es una excelente manera de pasar "lo que debería hacerse" a otra function. Muchas funciones estándar sí lo usan. Un ejemplo simple es foreach en una colección:

 listOf(1,2,3).forEach{ //tell what to do with each element in this lambda } 

También un buen lugar para encontrar lambdas es DSL, como la biblioteca Anko incluye una. Estos constructos también hacen un uso intensivo de lambdas.

  • Usar interfaces funcionales con types de funciones en Kotlin
  • Funciones de mayor order de Kotlin en el proyecto de Java
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • ¿Cómo funciona el generador htmlx de kotlin exactamente debajo del capó?
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • Kotlin lambda con Interface como argumento
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • Cuando los parameters lambda deben ser noinline en Kotlin?
  • Kotlin: uso ilegal de devolución de parameters en línea
  • Comportamiento con Kotlin Higher-Order Functions e interfaces de método único?
  • Kotlin no puede acceder a kotlin.jvm.functions.Function1 cuando llama a la function kotlin con java lambda