Kotlin: funcionalidades técnicas Ha sido salvado
Artículo
Kotlin: funcionalidades técnicas
Conociendo el lenguaje
En el articulo anterior analizamos en alto nivel y desde el punto de vista de desarrollador y empresas el lenguaje Kotlin, pero para conocer un lenguaje nada como un repaso a sus funcionalidades más relevantes desde el punto de vista técnico y de un desarrollador.
Puntos y comas
El punto y coma pasa a ser opcional en Kotlin
Sin tipos primitivos
En Java hay tipos primitivos y objetos, en Kotlin no hay casos especiales, todo son objetos.
Inferencia de tipos
Si el tipo de una variable es obvio, no es necesario ponerlo.
var miCadena = "De que tipo soy ?" // No es necesario indicar que es String
Tipos nullables
Por defecto las variables no pueden ser null, teniendo que indicarlo explícitamente cuando sea necesario.
var nombre: String // No puede ser null
Var apellido: String? // Puede ser null, el compilador obliga a protegerse
Inmutabilidad
Código más seguro contra sobreescritura de variables que no están marcadas como final.
val prefix = “” // Constante, inmutable.
var miVariable = “” // Variable
Propiedades
Cansados de definir propiedades, sus getter y setter y siempre tener que usarlos desde fuera ? Kotlin elimina esto, toda propiedad se accede por su nombre como valor, y en caso de querer logica especial en un getter o setter, permite definirlo de manera sencilla.
class ClaseKotlin {
var nombre: String? = null
}
class ClaseKotlinConGetter {
var nombre: String? = null
get() = nombre?.trim() // Getter de nombre
}
En ambos casos, se usa la propiedad de la misma manera:
val data = ClaseKotlin()
data.nombre = “pepeluis”
println(data.nombre)
Equals
Para evitar los típicos problemas de Java con comparación (==) vs equals, la comparación por defecto en Kotlin es el equals, en caso de querer comprobar que es la misma instancia se usará triple igual.
val luis = “pepeluis”
val pepe = “pepeluis”
luis==pepe // True
luis===pepe // False
Valores por defecto y parámetros por nombre
Se acabó el infierno de escribir 4 versiones del mismo método cambiando los parámetros para incluir valores por defecto.
Para completar, también se pueden indicar los parámetros por nombre.
Fun helloWorld(nombre: String = “Persona”, apellido: String=””) {
println("Hola, " + nombre + " " + apellido)
}
helloWorld() // Hola, Persona
helloWorld(“Pepe”) // Hola, Pepe
helloWorld(“Pepe”, “Garcia”) // Hola, Pepe Garcia
helloWorld(apellido = “desconocida”) // Hola, Persona desconocida
helloWorld(nombre= “Luis”, apellido=”Sanz”) // Hola, Luis Sanz
Clases de datos
A parte de las propiedades, con sus getters y setters, otra de las cosas típicas de las clases de datos en Java son los métodos equals, hashCode, copy y toString.
Típicamente los IDE’s tenian opciones para generar estos metodos, pero había que mantenerlos sincronizados con cada cambio.
Kotlin lo hace automáticamente con los data class
data class ClaseDeDatosKotlin {
...
}
Solo por incluir la palabra <data> antes que class, gracias a Kotlin tenemos los métodos arriba mencionados, sin tener que preocuparnos.
Interpolación de cadenas y literales
Kotlin acaba con las concatenaciones horribles de cadenas. Toda variable precedida por ‘$’ será reemplazada
println("Hola, $nombre $apellido")
Se permite la evaluación de expresiones dentro de la cadena
println("Hola, ${nombrePublico ? nombre : “desconocido”} ")
var cadenaInfernal = """
Los saltos de línea están permitidos, pero los espacios a la izquierda se cuelan en la variable
<--- estos espacios
Métodos de extensión
Las clases Utils, por ejemplo de cadenas, deben ser algo que existen en todos los proyectos, pero porque no incluir esos métodos en la clase que corresponde. Kotlin permite incluir métodos a prácticamente cualquier clase.
"mundo".sayHello() // Se usa como cualquier metodo estandar de String.
Funciones como parametros
Kotlin permite pasar funciones como parámetros, sin necesidad de interfaces o clases anónimas.
fun funcionQueRecibe(num: Int, funcion: (Int) -> Int) {
println(funcion(num))
}
fun cuadrado(num: Int): Int {
return num * num
}
funcionQueRecibe(5, ::cuadrado) // 25
Colecciones y rangos
Kotlin presenta una manera muy sencilla de trabajar con Colecciones, desde acceso comodo los elementos, métodos funcionales hasta métodos comúnmente usados.
Pero nada representa mejor la sencillez de uso de estructuras de datos que su inicialización, la cual en Java siempre ha sido un dolor:
val lista = listOf(“pepe”, ”luis”,”fer”)
val mapa = hashMapOf("pepe" to 1, "luis" to 3, "javier" to 7)
Otros ejemplos: mutableListOf(), setOf(), mutableSetOf(),hashMapOf()
Estas son solo algunas de las funcionalidades que he considerado resaltar sobre el lenguaje Kotlin. El lenguaje tiene mucho más donde profundizar y como suelo decir: Un lenguaje no lo aprendes leyendo sobre él, sino usándolo.
Ángel Hernández Fernández
Ángel es analista senior del área de tecnología de Deloitte con más de 6 años de experiencia. Se incorporó a Deloitte en 2011 dentro del área de DxD. Su carrera ha estado enfocada desde el inicio en el ámbito front-end formando parte de la iniciativa de la compañía desde su creación. Ha participado en proyectos que abarcan desde portales web, aplicaciones web SPA y aplicaciones móviles tanto hibridas como nativas en ambas plataformas, trabajando con las arquitecturas y frameworks más comunes en el mercado.
Recommendations
Tecnologías cognitivas: oportunidades reales para el negocio
Cómo aplicar las tecnologías cognitivas en las organizaciones