Kotlin funciones tecnicas

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.

Kotlin funcionalidades tecnicas

Á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.