Reified Types en Kotlin: cuándo usarlos

reified kotlin

Reified Types en Kotlin: cuándo usarlos

Los tipos reified son una funcionalidad de Kotlin que solemos usar en Android. Nos permite usar los tipos dentro de las funciones genéricas. Esto es algo que no se podía hacer antiguamente con Java. Y aquí se marcaron un buen punto los de JetBrains en su día. 🎯

Puedes seguir leyendo, o hacerte miembro y dejar que te lo cuente de viva voz (con algún detallito adicional). 🎧️

Este contenido está restringido.
Adquiere alguna formación.
O suscríbete para difrutar de los audios y vídeos exclusivos de Los androides Premium.

Funciones inline

Es más que probable que los reified types los hayas visto junto a la palabra reservada inline cuando estás leyendo código en un proyecto Android.

Y es que si no la añades, te saltará un error en tiempo de compilación. 🤣

Lo que sucede es que dentro de estas funciones inline, somos capaces de utilizar de manera más segura los objetos del tipo genérico que hemos marcado como reified. Y esto es posible ya que el código tiene que ser remplazado desde el lugar desde donde se llama.

Ejemplo de uso

Si queremos devolver un argumento que no sabemos de qué tipo va a ser, tendremos que usar genéricos.

Sin usar reified, nos quedaría algo así:

private fun <T> NavBackStackEntry.findArg(arg: NavArg): T {
    val value = arguments?.get(arg.key)
    requireNotNull(value)
    return value as T
}

Que por cierto, esto nos saltaría un warning en Android Studio indicando que el casting de value as T no está chequeado.

Con una función inline con reified, nos quedaría esto (sin ningún warning):

private inline fun <reified T> NavBackStackEntry.findArg(arg: NavArg): T {
    val value = arguments?.get(arg.key)
    requireNotNull(value)
    return value as T
}

Conclusiones del uso de reified en Kotlin en Android

El uso de reified es muy útil para simplificar el código y dejarlo más legible y seguro.

Desde mi punto de vista tiene una cosa buena y una no tan buena.

Empecemos por la no tan buena: 😁

Y es que como le hace falta que la función sea inline, esto implica que los tiempos de compilación aumenten.

¿Por qué?

Vamos a ver… depende del tamaño de la función. Es decir, al usar inline, en tiempo de ejecución va más rápido, ya que desde donde estamos llamando a la función remplazamos ese código. Con lo que si usamos reified en funciones grandes, y hacemos muchas llamadas a esa función desde distintos sitios, se tendrá que generar ese código para cada uno de los usos.

Y eso tiene un coste computacional al hacer las builds.

OK, ahora vamos con la parte más positiva: 😉

Si esto lo hacemos con criterio y sobre todo en funciones pequeñas, va a ser muy potente, ya que nos permite tener un código mucho más versátil, legible y seguro. 💯

¿Te ha gustado?

¿Conoces algún uso más?

Coméntalo dentro de la comunidad.

Por cierto, le has echado un ojo al plugin para Intellij IDEA Kotlin Notebook?

Publicado: 2023-06-12 Actualizado: 2023-07-09