Antes de hablar de las características de Kotlin, para recordar un poco, Kotlin es un nuevo lenguaje de programación desarrollado por JetBrains, al igual que Java, Kotlin es un lenguaje de programación de propósito general.

¿Cansado de nunca terminar el código de Java? pruebe Kotlin y ahorre tiempo. Clic para tuitear

Vamos con las Características de Kotlin para el desarrollo de Android

1. Importación de diseño estático

Uno de los código que más repetimos en el desarrollo de aplicaciones android con Java es utilizar la función findViewById(), función que nos permite obtener las referencias a las vistas ubicadas en las Actividades.

Kotlin nos pemrite importar todas las referencias a las vistas desde el diseño con una sola importación, para obtener estas referencias nos vamos a valer de una extensión de Anko para Kotlin.

Supongamos que tenemos un recurso de Layout con un TextView con id “mensaje”, para hacer la referencia a todas las vistas incluyendo el TextView indicado, en nuestro código escribimos la siguiente declaración de importación:

import kotlinx.android.synthetic.main.activity_main.*

Con esto ya tenemos la referencia a todas las vistas y nos evitamos de utilizar la función findViewById() para cada vista, nuestro código queraría de la siguiente forma:

import kotlinx.android.synthetic.main.activity_main.*

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mensaje.text = "Hola Mundo!"
    }
}

2. Escribir clases POJO con Kotlin

Algo que nos ahorra mucho Kotlin es el poder definir nuestras clases POJO (Plain Old Java Object) usadas para almacenar datos. Por ejemplo considere la siguiente clase en Java:

public class User {
   private String firstName;
  
   private String lastName;

   public String getFirstName() {
       return firstName;
   }

   public void setFirstName(String firstName) {
       this.firstName = firstName;
   }

   public String getLastName() {
       return lastName;
   }

   public void setLastName(String lastName) {
       this.lastName = lastName;
   }

En Kotlin quedaría de la siguiente manera:

class User {
   var firstName: String? = null

   var lastName: String? = null
}

Incluso hasta podemos darnos cuenta que ya no es necesario la instrucción public antes de la clase, ya que por defecto todo es público, vemos un gran ahorro de tipeo.

3. Herencia de clases y constructores

Kotlin tiene una sintaxis más concisa cuando se trata de constructores.

Constructores en Kotlin

Las clases en Kotlin tienen un constructor primario y uno o más constructores secundarios, un ejemplo de un constructor primario es:

class User constructor(firstName: String, lastName: String) {
}

El constructor primario va después del nombre de la clase en la definición de la clase. Si el constructor principal no tiene ninguna anotación o modificadores de visibilidad, la palabra clave constructor se puede omitir:

class Person(firstName: String) {
}

Tenga en cuenta que un constructor primario no puede tener ningún código; cualquier inicialización debe hacerse en el bloque init del código:

class Person(firstName: String) {
    init {
         //perform primary constructor initialization here
    }
}

Tenga en cuenta que cada constructor secundario debe delegar en un constructor primario. Esto es similar a Java, que usa la palabra clave this:

class User(val firstName: String, val lastName: String) {
    constructor(firstName: String) : this(firstName, "") {
       //...
    }
}

Al crear instancias de una clase, tenga en cuenta que Kotlin no tiene la palabra reservada new, al igual que Java. Para instanciar la clase User, hágalo de esta forma:

val user = User("John", "Doe)

Herencia en Kotlin

En Kotlin, todas las clases se extienden desde Any, que es similar a Object en Java. Por defecto, las clases están cerradas, como clases finales en Java. Entonces, para extender una clase, debe declararse como open o abstract:

open class User(val firstName, val lastName)
class Administrator(val firstName, val lastName) : User(firstName, lastName)

Tenga en cuenta que debe delegar en el constructor predeterminado de la clase extendida, que es similar al método super() para llamar en el constructor de una nueva clase en Java. Para mayor referencia sobre las clases revise la documentación oficial de Kotlin.

4. La función with()

La función with() es útil y viene con la biblioteca estándar de Kotlin. Se puede usar para guardar algunos tipeos si necesita acceder a muchas propiedades de un objeto. Por ejemplo:

with(mensaje) {
    text = "Hola Mundo!!!"
    visibility = View.VISIBLE
}

En el ejemplo anterior podemos ver una reducción de código para asignarle valores al TextView mensaje que utilizamos en el primer ejemplo.

5. Asignación de un objeto a un mapa

Un caso de uso común es almacenar valores de las propiedades dentro de un mapa. Esto ocurre a menudo en aplicaciones que trabajan con API RESTful y analizan objetos JSON. En este caso, una instancia de mapa se puede usar como un delegado para una propiedad delegada, a continuación un ejemplo desde la documentación oficial:

class User(val map: Map<String, Any?>) {
    val name: String by map
    val age: Int     by map
}

En este ejemplo, User tiene un constructor primario que toma un mapa. Las dos propiedades tomarán los valores del mapa que están mapeados bajo claves que son iguales a los nombres de propiedad:

val user = User(mapOf(
    "name" to "John Doe",
    "age"  to 25
))

A la propiedad name de la nueva instancia de usuario se le asignará el valor de “John Doe” y la propiedad edad el valor 25.

Esto funciona para las propiedades var en combinación con MutableMap también:

class MutableUser(val map: MutableMap<String, Any?>) {
    var name: String by map
    var age: Int     by map
}

Conclusiones

Acabamos de ver 5 características de Kotlin para hacer nuestro desarrollo de aplicaciones Android más eficiente, existen otros temas a considerar como las expresiones Lambda, la seguridad nula, las propiedades delegadas y las colecciones, para lograr una gran mejora.

En resumen, Kotlin le ofrece la posibilidad de ahorrar tiempo al momento de escribir aplicaciones Android nativas mediante una sintaxis intuitiva y concisa. Todavía es un lenguaje de programación joven, pero en mi opinión, ahora es lo suficientemente estable como para usarlo en la creación de aplicaciones de producción.

Conoce sobre los beneficios y desventajas de utilizar Kotlin en el desarrollo de aplicaciones Android. Clic para tuitear

Los beneficios de usar Kotlin:

  • El soporte de Android Studio es perfecto y excelente.
  • Es fácil convertir un proyecto de Java existente en Kotlin.
  • El código de Java y Kotlin puede coexistir en el mismo proyecto.
  • No hay una sobrecarga de velocidad en la aplicación.

Las desventajas:

  • Kotlin agregará sus bibliotecas al generar el .apk, por lo que puede pesar un poco más que generar el .apk con Java.
  • Si se abusa la sobrecarga de operadores se puede llegar a un código ilegible.
  • El autocompletar del IDE se comporta un poco más lento cuando se trabaja con Kotlin que con proyectos puros de Android con Java.
  • Los tiempos de compilación pueden ser un poco más largos.

Recuerda visitar nuestra Guía para empezar con Kotlin, ya que este lenguaje tiene un gran futuro por delante, y también compartir la información.

Acerca del Autor

Grover Vásquez

Profesional de TI con más de 10 años de experiencia, en el campo de las Tecnologías de la Información, Programación y Seguridad de la Información. Instructor Online y presencial de cursos de programación de aplicaciones.

Ver Artículos