Android Java Callbacks vs Kotlin Lambdas

Yellowme
Yellowme
Published in
3 min readDec 14, 2017

Para los que tienen algo de experiencia programando con Java para Android, saben que unos de los mayores dolores de cabeza son los callbacks. Sobre todo por que hay que crear una interface, la cual sirve como firma de la función que quieres pasar como parámetro.

Callbacks en Java

Para que esto quede mas claro, veamos un ejemplo sencillo de uso de callbacks en Java, agregando un evento de click a un botón.

Primero creamos una interface que le llamaremos OnClickListener.

Después tenemos que generar una instancia de esa interface la cual pasaremos como parámetro al botón, para que cuando suceda la acción de click accione el listener.

Sin embargo este tipo de llamada directo sobre la declaración del botón, puede dejar nuestro código un poco sucio. Si queremos dejarlo limpio, tenemos que agregar la implementación de la interface en la clase donde esta la instancia del botón, esto nos obliga a que la clase tenga que declarar el método onClick.

Esto da como resultado un código más fácil de leer, pero resultaría confuso, ya que si llegamos a tener varios botones dentro de la misma clase no se puede saber cual botón esta accionando al listener.

Lambdas en Kotlin

Ahora, para realizar esta misma tarea usando código en Kotlin, solo es necesario la siguiente linea de código:

Cual código podemos dejar mas sencillo, primero mediante extensions, agregaremos una función a la clase String, la cual llamaremos makeTest, la cual toma una cadena y la imprime en pantalla usando Toast.

Con esto podemos hacer que cualquier String adquiera la propiedad de invocarse a si mismo dentro de un Toast. Ahora nuestro código en Kotlin queda aun mas corto.

Como resultado tenemos código más claro de leer y entender, sobre todo cuando alguien ve nuestro código, o cuando pasan semanas y quieres reparar algún bug y no tienes idea de que hacia ese código revuelto.

Un último ejemplo

Ahora veamos un ejemplo más complejo, como es el manejo de callbacks en adapters, para este ejemplo tenemos un List Adapter usando un Recycler Viewer, primero tenemos veamos como queda el adapter en Java.

Se puede observar que tenemos repetido el uso del listener OnClick, debido a esto no es posible implementarlo a nivel de clase, por lo que cada elemento tiene que tener su código dentro.

Quedando la clase del Activity de la siguiente manera:

Aunque del lado del Activity queda mejor estructurado el código debido al listener implementado. El problema vendría si tenemos dos listas dentro de la misma actividad, y cada una queremos que accione a listeners diferentes.

Haciendo esto con Kotlin con Lambdas queda mucho mas sencillo, del lado del adapter queda en un paso de funciones al constructor, y en un uso simple de un ViewHolder.

Y del lado del Activity, podemos declarar las funciones a nivel clase, y luego solo pasar estas dentro del constructor del activity.

En conclusión, Kotlin viene a ayudar en muchos aspectos y uno de ellos es mejorar la limpieza de nuestro código, sin embargo son tareas que ya se podían lograr con java, nada mas es cuestión de tener una buena organización de código. Ya que si no tenemos limpieza en nuestro código, aun programando en Kotlin vamos a tener problemas con nuestro código.

Si les gusto, me gustaría preparar otro artículo donde quiero hablar sobre el uso Architecture Components.

--

--