Las funciones de extensión en Kotlin

01-05-2018 - Andrés Cruz

In english
Las funciones de extensión en Kotlin

Las funciones de extensión son una poderosa herramienta que nos ofrece Kotlin al momento de desarrollar aplicaciones en Android.

Una manera de verlo es como si pudiéramos extender en base a funciones clases definidas ya sea por nosotros, de terceros o provistas por Kotlin de una manera rápida y sin complicaciones.

Por ejemplo, si quisiéramos extender el tipo de dato Int con una función que nos indica si es un número par:

fun Int.isEven(): Boolean = (this % 2 == 0)

Con esta función estamos expresando en una función que extiende de los tipos de datos enteros que verifique si un número es par o no; para emplearlo podemos hacer lo siguiente:

println(10.isEven())

La respuesta del compilador sería true.

Como indicamos en un inicio, también podemos emplear las funciones de extensión en otros tipos de estructuras como clase; por ejemplo, tomando la clase anterior Persona que definimos en la entrada de Clases en Kotlin: clases vacías, constructores y propiedades:

class Persona(nombre: String, apellido: String, edad: Int) {
var nombre: String = ""
var apellido: String = ""
var edad: Int = 0

init {
	this.nombre = nombre
	this.apellido = apellido
	this.edad = edad
}

}

Podemos hacer lo siguiente:

fun Persona.esTerceraEdad(): Boolean = edad >= 60

También la podemos simplificar como:

fun Persona.esTerceraEdad() = edad >= 60
var persona = Persona("Andrés"," Cruz",27)
println(persona.esTerceraEdad())

Para este ejemplo, en la que la edad es menor a 60 años retorna false; si por el contrario, creamos una persona como:

var persona = Persona("Andrés"," Cruz",80)

La respuesta sería true.

Las funciones de extensión y los tipos nulos en Kotlin

Note que en base a los ejemplo que estamos viendo anteriormente, nada nos impide que empleemos funciones de extensión con variables nulas en un momento dado, esto podría ser un problema pero lo podemos solventar fácilmente realizando una comprobación previa e indicando el operador en cuestión luego de indicar el nombre de la clase en la función de expresión:

fun Int?.isEven(): Boolean {
   if (this != NULL) return this % 2 == 0

   return false;
}

println(NULL.isEven())

El código anterior, nos devolvería false; veamos otro ejemplo sobrescribiendo el método toString():

fun Any?.toString(): String {
   if (this == NULL) return "nada"
   return toString()
}
println(NULL.toString())

Y esto nos devuelve el texto nada.

Puedes obener más información de como emplear las variables de extensión en la documentación oficial en el siguiente enlace: Kotlin: Extensions.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.