Las interfaces en Kotlin te van a permitir una mayor reutilización de código de la que conseguías con Java.

La razón es muy sencilla: puedes añadir código a tus interfaces. Si has probado Java 8, es algo muy parecido.

Lo bueno de de poder incluir código en una interfaz es que podrás utilizar composición de forma mucho más potente. Ahora lo veremos.

Este artículo forma parte de una serie de 30 con motivo del lanzamiento del curso presencial de Kotlin para Desarrolladores Android, que impartiré muy pronto. ¡Aún estás a tiempo de apuntarte!

kotlin-desarrolladores-android

Las interfaces en Java 6

El problema con las interfaces de Java es que sólo podemos describir comportamiento, pero no implementarlo.

Esto es suficiente en muchos casos. Pero hay situaciones que no nos permite solucionar, pues nos obliga a delegar la implementación de dicha interfaz en objetos individuales si queremos conseguir una buena composición.

Todo esto hace que algo tan sencillo como poder componer el código de una clase mediante piezas reutilizables se vuelva bastante complicado.

Las interfaces en Kotlin

Kotlin nos trae una muy buena noticia: las interfaces pueden tener código.

Esto significa que podemos implementar un especie de herencia múltiple (algo limitada, en cualquier caso). Podemos hacer que una clase implemente varias interfaces, y que herede el comportamiento de cada una de ellas.

Implementar una interfaz con código es muy sencillo:

Podríamos tener otra interfaz 2 con otra función:

Y una clase que las implemente podría utilizar ambas sin problema:

¡Genial! Esto nos da mucha mayor versatilidad a la hora de organizar nuestro código.

Las interfaces no pueden tener estado

Es una limitación importante a tener en cuenta. Podemos tener código pero no estado.

Esto quiere decir que no podemos crear una property y almacenar estado en ella. Si definimos una property en una interfaz, la clase que la implemente necesita sobrescribirla.

Vamos a ver un ejemplo. Imaginemos que la interfaz necesita un contexto:

El código es sencillo. Es una interfaz que implementa un método que muestra un Toast. Para eso necesita el contexto.

Si tenemos una actividad que queremos que utilice esta interfaz, necesitaremos sobrescribir el contexto:

Así de sencillo. Asignamos la propia Activity como contexto, que la interfaz podrá utilizar para su función.

Ahora ya puedes usar las funciones de Toaster en la Activity sin ningún problema.

Delegación de interfaces

Otra funcionalidad muy interesante en Kotlin es la delegación de interfaces. Es una herramienta muy potente para conseguir una composición más limpia.

Imagina que tienes una clase C, compuesta por dos objetos de tipo A y B:

La clase C utiliza las funciones A y B dentro de su propio código.

Si un objeto está compuesto por dos componentes, estaría muy bien que pudiera usar sus funciones directamente.

Hay otra forma de escribir este código y conseguir el mismo resultado, usando la delegación de interfaces:

Puedes ver que la clase C está implementando A y B, pero realmente está delegando la implementación en los objetos que recibe como parámetro.

De esta forma, puede usar las funciones de las interfaces como si fueran suyas.

Conclusión

Hemos visto las diferencias entre las clases de Java y las de Kotlin. Ahora trata de buscar en qué situaciones pueden simplificarte la vida, pues estas nuevas ideas te abren un mundo de posibilidades.

Tu código será más reutilizable que antes y mucho más legible.

¿Aún crees que Kotlin no es el lenguaje del futuro en Android? ¡Empieza a utilizarlo cuanto antes! En el curso presencial veremos todas estas cosas en un ejemplo real, y tú mismo las implementarás. ¡No lo retrases más! Apúntate hoy.