[KfS06] Kotlin Features: Type Check y Smart Cast

Kotlin by JetBrains

Primero que todo, gracias por seguir esta serie de articulos sobre Kotlin que resumen lo que he aprendido del lenguaje, si quieres seguir leyendo mis apuntes sobre Kotlin puedes encontrarlos aquí:

Una de las mejores manera de aprender un nuevo lenguaje es leyendo código y siendo a excelentes programadores de los que aprender. como Antonio Leiva, Jake Wharton y la clase magistral de introduccion al lenguaje de Hadi Hariri . Revisando me di cuenta de una particularidad de Kotlin, la verificación de tipos y el “casteo” automatico. En Android, una de las tareas más comunes en recuperar una referencia a un View de nuestro layout y aplicarle alguna acción por ejempo:

  • Asinar un Texto a un TextView
  • Recuperar el texto a partir de un EditText.
  • Manejar el evento click de un Button u otro View.

En Java hacemos lo siguiente:

findViewById cons casting en Java

En Kotlin podriamos ver el mismo comportamiento en los siguientes casos:

findViewById en Kotlin: Type Check y Smart Cast

Como podemos observar tenemos tanto el operador is como el operador as, ahora analicemoslo un poco más.

no es un post sobre findViewById
Nota: Kotlin nos ofrece una manera sencilla de recuperar las vista y comenzar a usarlas a través de Kotlin Android Extensions, pero este post esta orientado a Type Check y Smart Cast.

Type Check y Smart Cast

El operador is nos permite verificar en tiempo de ejecución si es de un determinado tipado (En la documentación nos cuentan que si deseamos evaluar el caso contrario podemos usar !is). En caso de que el objeto perteneca a ese tipo lo castea como tal y podemos aplicar alguna operación. veamos un ejemplo simple:

Type Check and SmartCast

Como ven Kotlin verifica si el valor recibido es de tipo String y de serlo lo “castea” a ese tipo y nos deja realizar la operación correspondiente. En este caso en la segunda llamada a la función isString le pasamos un objecto de tipo Int y en una de las condiciones del when validamos que el valor recibido no sea una un String y como resultado imprimimos un mensaje. El operador is se podria decir que se parece al instanceof de Java, pero diría que mucho más potente pues como mencione al comprobar que el objecto es del tipo nos hace un castin automático. Repitamos el ejemplo anterior en Java para apreciar lo que acabo de mencionar:

Java Way :(

En Java tendremos la misma respuesta pero tenemos que hacer el cast despues de verificar el tipo. Comparas un poco los ejemplos de Kotlin vs Java y en mi caso lo primero que pienso es:

Kotlin is ❤

Operador de Cast as: “Unsafe” vs “Safe”

Antes de comenzar a hablar del operador es importante resaltar las comillas en las palabras “Unsafe” y “Safe”. En la documentación nos comentan que el operador as nos permite castear genericos a un tipo y nos explican que lo llaman “Inseguro” debido a que es un operador cast siempre arrojará una Exception si el cast no es posible, veamos un ejemplo:

Esto quiere decir que cuando usemos el operador as debemos estar seguro de que el cast será posible o nos aguarda una Exception para recordarnoslo. Esto no quiere decir que debemos evitar usarlo, pues Kotlin nos ofrece una manera “segura” de usarlo y eso es un ? al final, lo cual evaluará que si el objeto no es casteable al tipo nos lo regresara como un Nullable, veamos su aplicación:

Kotlin to the rescue ❤

Con eso finaliza esta articulo, junto a unos panas entusiastas de aprender tenemos un Grupo de Telegram y queremos organizarnos como Comunidad, aunque la mayoria seamos de Venezuela no es limitante si quieres colaborar, aprender y compartir con nosotros estas invitado.

Happy Coding!!