Introducción a Kotlin

video[Tutorial Introducción a Kotlin

Un poco de historia

Kotlin fue creado en 2010 por JetBrains, empresa responsable de Intellij IDEA, el entorno de desarrollo en que se basa Android Studio. En JetBrains trabajaban habitualmente con Java, lenguaje que les resultaba muy farragoso y pesado. Para algo tan simple como asociar código a un evento, teníamos que declarar una interface e instanciar un objeto anónimo.  Para cambiar el atributo de un objeto teníamos que hacerlo a través de un setter. Parece como si los diseñadores de Java disfrutaran escribiendo cientos de líneas de código repetitivo.
En JetBrains necesitaban un lenguaje más conciso que Java, pero que compilara en la máquina virtual Java. La opción más clara era utilizar Scala, pero lo descartaron por razones de eficiencia y exceso de potencia. Puede parecer que, a más potencia mejor, pero un exceso de potencia da mucha libertad al desarrollador, que puede usar diferentes estilos para escribir código. Esto da problemas cuando trabajamos en equipo o en el testing. Por lo tanto, decidieron crear un nuevo lenguaje que fuera 100% interoperable con Java, pero que incorporara las últimas técnicas de lenguajes más modernos como Scala, C#, Go, Swift o Python.
Con respecto a la potencia y libertad que nos proporciona cada lenguaje, podemos hacer la siguiente recapitulación histórica. C++ fue creado para dar una gran libertad al programador. Este podía utilizar diferentes paradigmas y estilos de programación. Esta característica se vio contraproducente, ya que un mismo programa podría escribirse de formas muy diferentes. Java trata de corregir este exceso, creando un lenguaje muy sencillo, pero posiblemente se peque de exceso de rigurosidad. El código resulta muy pesado de escribir e incluso poco legible. Luego aparece Scala, basado en el mismo concepto de máquina virtual Java, pero dando mucha más flexibilidad y potencia al lenguaje. Finalmente aparece Kotlin, que podríamos decir que se encuentra en un término medio. Es más flexible que Java, pero menos que Scala o C++.

Características de Kotlin

Cada vez que oímos que ha aparecido un nuevo lenguaje de programación, lo primero que se nos pasa por la cabeza es: ¿No hay ya suficientes lenguajes de programación? ¿Merece la pena aprender uno nuevo? Parece que muchos desarrolladores de Android opinan que realizar este esfuerzo sí que merece la pena. En este primer punto, vamos a intentar convencerte de que no te arre-pentirás aprendiendo Kotlin. Pasamos a describir las principales características de Kotlin. Como un ejem-plo vale más que mil palabras, trataremos de demostrar cada característica comparando código Java con Kotlin.
Para ampliar información te recomendamos la referencia oficial de Kotlin kotlinlang.org/docs/reference/ y el libro Kotlin for Android Developers de Antonio Leiva.

Conciso

Lo primero que te llamará la atención es que para programar en Kotlin vas a tener que escribir mucho menos código. Veamos los casos más exagerados:
  •     Uso de Lambdas o funciones anónimas:
botón.setOnClickListener(
  new View.OnClickListener(){
    @Override
    public void onClick(View v){
       hazAlgo();
    }
}); 
boton.setOnClickListener { hazAlgo() } 
  •     Definición de clases mucho más concisa:
public class Persona {
   private String nombre;
   public String getNombre() {
      return nombre;
   }
   public void setNombre(String n){
      nombre = n;
   }
} 
class Persona {
   var nombre: String = ""
} 
  •    Clases de datos para definir POJOS.
  •    Adiós a findViewById():
TextView textView = (TextView) 
     findViewBy-Id(R.id.textView);
textView.setText("¡Hola Mun-do!"); 
textView.text = "¡Hola Mundo!" 

Legible y expresivo

Otra característica de Kotlin es que resulta mucho más legible. Al leer el código nos va a costar menos entender su significado. Veamos algunos aspectos donde se ha mejorado la expresividad:

  •    Un código conciso resulta siempre más legible que uno largo. No tienes más que comparar los códigos anteriores y ver cuál resulta más legible.
  •    Adiós a los getters y setter:
     
textView.setText("¡Hola Mun-do!"); 
textView.text = "¡Hola Mundo!" 
  •     Funciones con nombres de atributos:
format("hola", true, true); 
format("hola", normalizeCase = true,
        upperCaseFirstLetter = true);
  •    Nuevas estructuras de control for y when más expresivas.
  •    Extiende la funcionalidad de una clase sin usar la herencia de forma legible y natural.
Preguntas de repaso: Características de Kotlin.