Tenemos que admitir que el Framework de Android a veces nos pone las cosas un poco difíciles, y en Java la única solución que nos queda es crear wrappers que hagan las cosas como nosotros queremos, lo que muchas veces es demasiado complejo para lo que queremos.

¿Qué te parecería poder añadir funciones extra a las clases del Framework? Esto es lo que nos permiten las funciones de extensión de Kotlin.

Este artículo forma parte de una serie de 30 con motivo del lanzamiento de mi curso presencial, donde aprenderemos todo esto y mucho más de forma totalmente práctica.

kotin-desarrolladores-android

Funciones de extensión en Kotlin

Las funciones de extensión (o extension functions en inglés) son funciones que, como su propio nombre indica, nos ayudan a extender la funcionalidad de clases sin necesidad de tocar su código. Ahora vamos a ver cómo se definen estas funciones, y algunos ejemplos que a mí personalmente me resultan muy útiles.

¿Cómo se define una función de extensión?

Tan solo hay que escribir una función como lo harías normalmente, y ponerle delante el nombre de la clase separado por un punto.

Ejemplo muy sencillo: queremos hacer que una vista tenga la función visible(), que la hace visible. Escribiríamos algo como esto:

El this  lo he puesto para que veas que podemos usar las funciones y propiedades de esa clase como si estuviéramos dentro de  la propia clase, pero lo puedes omitir:

Algunos ejemplos interesantes

Hay un par de ejemplos que me gusta poner, porque resumen muy bien la potencialidad de esto.

El primero es cuando estás inflando una vista dentro de un adapter. Normalmente utilizarías algo así:

La línea que infla la vista y usa el parent es demasiado compleja, y el 99% de las veces suele ser igual en cualquier adapter. ¿Por qué no hacer que los ViewGroup  puedan inflar vistas?

Ahora ya puedes utilizarlo en el código de arriba:

Un ejemplo muy parecido se puede hacer con las imágenes. Si utilizas por ejemplo la librería de Picasso, necesitas andar haciendo el típico ritual:

¿Qué te parecería poder decirle a ImageView que cargue una url directamente?

Propiedades de extensión

Igual que puedes hacer funciones de extensión, lo mismo puedes hacer con properties. Lo único que no podrán guardar un estado propio, sino valerse de las funciones ya existentes para modificar el estado:

Esta property recupera los hijos de un ViewGroup

Ahora podrías iterar sobre ellos directamente:

Nota: it es una palabra reservada que se utiliza para acceder al valor de entrada de la función, cuando solo hay uno. Como ya hemos visto en otros artículos, se pueden nombrar esos valores de entrada, y asignar más cuando hay más de uno.

Conclusión

Con las funciones y las propiedades de extensión puedes extender cualquier librería a la que no tengas acceso y luego utilizar esas funciones y propiedades como si fueran propias de la clase. Lo único que verás es un import extra en el archivo en el que se use.

Si de verdad vas en serio con Kotlin y, como yo, piensas que es el lenguaje del futuro en Android, te recomiendo que le eches un vistazo al curso presencial que estoy preparando. ¡Plazas muy limitadas!