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.

  • Referencia al método de una instancia particular en Kotlin
  • Función para expresión lambda
  • Disruptor LMAX con Kotlin: ¿No se puede usar lambda?
  • Kotlin: lambda nunca comstack
  • Pase la interfaz como parámetro en Kotlin
  • Kotlin genera class interna para lambda
  • Mocktito ArgumentCaptor para Kotlin lambda con arguments
  • Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
  • Tratando de entender el ejemplo de Kotlin
  • Kotlin: ¿Cómo puedo invocar un campo lambda que tiene un tipo genérico de su class?
  • Kotlin: ambigüedad de resolución de sobrecarga lambda y sobrecarga