Hoy os voy a hablar de las funciones lambda en kotlin, seguro que muchos ya las conoceis ya que también estaban en Java 8, pero para los que no las conozcáis una expresión lambda es una expresión lambda representa una función anónima. Las funciones lambdas son una manera excelente de reducir la cantidad de código necesaria para ejecutar ciertas tareas que son repetitivas en el desarrollo Android—por ejemplo, la escritura de listeners y callbacks.
Una expresión lambda está compuesta por una serie de parámetros, un operador lambda (->) y el cuerpo de una función, dispuestos de la siguiente manera:
1 |
{ x: Int, y: Int -> x + y } |
Al construir expresiones lambda en Kotlin, debes tener en cuenta las siguientes reglas:
- La expresión lambda debe estar delimitada por llaves.
- Si la expresión contiene cualquier parámetro, debes declararlo antes del símbolo ->.
- Si estás trabajando con múltiples parámetros, debes separarlos con comas.
- El cuerpo de la función va luego del signo ->.
El mayor beneficio de las expresiones lambda es que te permiten definir funciones anónimas y luego pasar estas funciones inmediatamente como una expresión. Esto te permite ejecutar muchas tareas comunes de desarrollo de manera más fácil y rapida que en Java 7 y anteriores.De hecho, la ausencia de lambdas en Java 7 y anteriores es uno de los motivos principales por el cual la manera de escribir listeners y callback en Android esta tan anticuada.
Veamos un ejemplo común: añadir un click listener a un botón. En Java, esto típicamente requeria (No a partir de Java 8) el siguiente código:
1 2 3 4 5 6 |
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(this, "El botón ha sido pulsado", Toast.LENGTH_LONG).show(); } }); |
Sin embargo, las funciones lambda de Kotlin te permiten declarar un click listener usando una sola línea de código:
1 |
button.setOnClickListener({ view -> toast("El botón ha sido pulsado") }) |
Esto ya resulta mucho más conciso y fácil de leer, pero podemos ir más lejos—si una función espera otra función como último parámetro, puedes pasarla por fuera de la lista dentro de los paréntesis:
1 |
button.setOnClickListener() { toast("El botón ha sido pulsado") } |
Y si la función solo tiene un parámetro que es una función, puedes remover los paréntesis por completo:
1 |
button.setOnClickListener { toast("El botón ha sido pulsado") } |
Deja un comentario