Kotlin es el lenguaje multiplataforma de Jetbrains con el que puedes desarrollar aplicaciones para móviles Android con la toda tranquilidad que puede darte Google. Kotlin tiene características muy interesantes que lo hacen uno de los lenguajes que debes aprender junto a Java si quieres desarrollar Android. Vamos a ver algunas de ellas.
En mayo de 2017 en el Google I/O se hizo oficial el soporte de primera clase a Kotlin. Esto no quiere decir que ahora Kotlin será el único lenguaje para desarrollo de aplicaciones móviles, de hecho, es mejor, Kotlin y Java interactúan perfectamente al 100% así que tienes la posibilidad de aprovechar las mejores características de un lenguaje moderno y potente sin necesidad de desechar las mejores características de Java.
Kotlin opera sobre la JVM (Java Virtual Machine), es decir que con toda tranquilidad podemos trabajar con archivos que tengan las dos extensiones .kt
para archivos de Kotlin y .java
para archivos de Java. El IDE (el entorno de desarrollo) con el que estamos trabajando pasa cada uno de estos archivos por su compilador correspondiente, generando como resultado bytecodes es decir archivos que procesa la JVM o cualquier máquina que esté basada en máquina virtual, así que para la JVM es totalmente transparente el lenguaje con el que estás trabajando.
Contrario a otros lenguajes que te ponen limitaciones a la hora de escribir tus programas y con los que necesitas tener varias decenas de líneas de código antes de poder ejecutar cualquier cosa, Kotlin está hecho para que, con muy poco código, puedas generar la misma funcionalidad, claro está, sin perder la legibilidad, comparado con Java es aproximadamente un 40% menos de código que necesitas escribir.
Uno de los ejemplos que a mí más me impactó es la forma de crear un POJO en Java y crear un Data class en Kotlin que viene siendo una versión más reducida, más amigable y más potente de un POJO. Dejo el código para que veas y me cuentes si quedaste como yo 😮
Código para una galleta en Kotlin:
data class Galleta(val sabor: String, val chispas: String)
Código para una galleta en Java:
publicclassGalletaJv{
private String sabor;
private String chispas;
publicGalletaJv(String sabor, String chispas){
this.sabor = sabor;
this.chispas = chispas;
}
publicString getSabor(){
return sabor;
}
publicvoidsetSabor(String sabor){
this.sabor = sabor;
}
publicString getChispas(){
return chispas;
}
publicvoidsetChispas(String chispas){
this.chispas = chispas;
}
@OverridepublicString toString(){
return"GalletaJv{" +
"sabor='" + sabor + '\'' +
", chispas='" + chispas + '\'' +
'}';
}
@Overridepublicbooleanequals(Object o){
if (this == o) returntrue;
if (o == null || getClass() != o.getClass()) returnfalse;
GalletaJv galletaJv = (GalletaJv) o;
if (sabor != null ? !sabor.equals(galletaJv.sabor) : galletaJv.sabor != null) returnfalse;
return chispas != null ? chispas.equals(galletaJv.chispas) : galletaJv.chispas == null;
}
@OverridepublicinthashCode(){
int result = sabor != null ? sabor.hashCode() : 0;
result = 31 * result + (chispas != null ? chispas.hashCode() : 0);
return result;
}
@OverrideprotectedObject clone()throws CloneNotSupportedException {
returnsuper.clone();
}
@Overrideprotectedvoidfinalize()throws Throwable {
super.finalize();
}
}
😮 creo que esto es mas de 40%
Y quién no se haya encontrado alguna vez con un NullPointerException que levante la mano.
Bueno pues parece que con Kotlin esta época ha pasado al olvido, el sistema de tipeado de Kotlin está orientado a prevenir que hagas referencias a objetos nulos.
De acuerdo con la documentación oficial hay varias formas de llegar a un NPE, veamos algunas:
Llamándolo explícitamente para manejar la excepción throw NullPointerException();
Cuándo código java externo lo causa
Cuándo hay alguna inconsistencia relacionada con la inicialización
En Kotlin existen varias formas en las que podemos combatir este error, la primera es validando si la variable es nula y manejarlo con condicionales.
Por ejemplo:
val l = if (b != null) b.length else -1
Y manejarlo así:
if (b != null && b.length > 0) { print("String of length ${b.length}") } else { print("Empty string") }
Esta forma realmente es como lo haríamos normalmente, ahora veamos que es lo que ofrece Kotlin
La segunda forma de evitar el NPE es haciendo uso del operador?.
, esto se conoce como llamada segura.
b?.length
retorna el tamaño de b
si b
no es nulo y null
en otro caso.
Pero ¿qué pasa cuando tenemos una referencia que puede ser nula? Para estos casos es correcto usar el Elvis operator?:
.
Por ejemplo:
Val l: b?.length ?: -1
Si la expresión b?.length
retorna un valor nulo el elvis operator ?:
va a retornar -1 en caso contrario retorna lo que traiga b?.length
.
Kotlin es un lenguaje moderno, fácil de escribir y fácil de aprender. Tiene muchas caraterísticas que lo hacen una opción excelente y en Platzi tenemos un curso especialmente construido para que aprendas desde cero, en serio, no necesitas saber Java para empezar. Empieza tu camino con el lenguaje del futuro.