Como se ha dicho antes, en Kotlin todo es un objeto y por ende esta característica, las funciones de extensión, es aplicable tanto a los objetos que te da el propio lenguaje, los creados por otra librería de terceros o los que tu mismo crees.

Es una de las funciones que más me gustan de Kotlin, y es añadir nuestras propias funciones a cualquier objeto que usemos en nuestra aplicación. Con un ejemplo será todo más claro:

Supongamos que generalmente en nuestra app nos interesa que un String tenga una funcionalidad adicional, como por ejemplo mostrarse por pantalla pero con una tag que facilite su lectura. Esto en Android es bastante habitual cuando usas el logcat. En Kotlin podríamos hacer lo siguiente:

Ahora cada vez que queramos hacer mostrar algo solo tendremos que usar .log() directamente en nuestra cadena de texto en vez de tener que escribir de forma repetitiva la plantilla de texto:

Y como habréis comprobado, hemos añadido esa nueva función a un objeto propio del lenguaje, String, por lo que podemos añadir funciones de extensión a cualquier cosa. En Android el clásico ejemplo es el de combinarlo con Picasso o Glide para añadir la función al ImageView de mostrar imágenes de Internet evitando todo el boilerplate habitual:

Estoy tratando de hacer un recopilatorio de funciones de extensión, podéis aportar vuestro granito siempre que queráis dejando un comentario abajo o en el repositorio de GitHub.

Enlaces de interés:

Menú