🟠 Kotlin — 2011

⬅️ Atlas · 🗂️ Todas las fichas · 📚 Índice de clases

Kotlin es lo que pasa cuando una empresa que hace herramientas de desarrollo —JetBrains— diseña un lenguaje: cada decisión responde a un problema concreto que habían visto miles de veces en código Java real. No inventa paradigmas; quita fricción, y esa modestia es la razón de su éxito.

🎯 Por qué está en este programa

Kotlin es un primo de la familia JVM (Atlas), cuyo representante en el núcleo es Java.

Aporta al programa la comparación más didáctica de todo el Atlas: el mismo programa, en la misma máquina virtual, con la misma biblioteca — y la mitad de líneas. Y aporta dos conceptos concretos: la nulabilidad en el sistema de tipos (clase 100) y las corrutinas con concurrencia estructurada (clase 134).

Año 2011; 1.0 en 2016; oficial en Android desde 2017; 2.0 en 2024
Autoría JetBrains, con Andrey Breslav al frente del diseño inicial
Familia JVM; con influencia de Scala, C#, Groovy y ML
Paradigma Multiparadigma: OO y funcional, con orientación a DSL
Tipado Estático, con inferencia y nulabilidad en el tipo
Memoria La de la JVM; en Native, con conteo de referencias
Ejecución Bytecode JVM; también Kotlin/Native, Kotlin/JS y Kotlin/Wasm
Estado 🟢 Oficial en Android, en crecimiento en servidor y multiplataforma

📜 Historia

JetBrains hacía IntelliJ IDEA, y su producto estaba escrito en Java. En 2010 tenían dos problemas: Java evolucionaba despacio —los genéricos habían tardado ocho años, las lambdas tardarían diez— y Scala, que les gustaba, compilaba demasiado lento para una base de código de su tamaño.

Así que hicieron el suyo, con dos requisitos poco habituales y muy reveladores:

  1. Interoperabilidad total con Java, en las dos direcciones. Nada de migrar: poder mezclar ficheros .java y .kt en el mismo proyecto.
  2. Compilar tan rápido como Java.

Esa primera decisión es la que explica la adopción: no hubo que elegir. Es la estrategia opuesta a la de D frente a C++ (clase 175), y funcionó.

El punto de inflexión llegó en 2017, cuando Google anunció Kotlin como lenguaje oficial de Android, y en 2019 lo declaró preferente. El contexto ayudaba: Google estaba en pleito con Oracle por las APIs de Java, y Kotlin ofrecía una salida.

Kotlin 2.0 (2024) trajo el compilador K2, con mejoras grandes de velocidad, y consolidó Kotlin Multiplatform: el mismo código de negocio compilado a JVM, a nativo para iOS, a JavaScript y a WebAssembly.

🏭 Dónde vive hoy

🧠 Lo que enseña: la nulabilidad en el tipo

Es la aportación más transferible de esta ficha (clase 100):

var nombre: String = "Ana"
nombre = null           // ✗ NO COMPILA

var apodo: String? = null    // ← el ? declara que puede faltar
println(apodo?.length)        // llamada segura: si es nulo, da nulo
println(apodo ?: "sin apodo")  // operador Elvis: valor por defecto
println(apodo!!.length)         // afirmación: falla si es nulo

Tony Hoare llamó a la referencia nula "su error del billón de dólares", y Kotlin lo resuelve como Rust, Swift y Elm: separando en el sistema de tipos lo que puede faltar de lo que no.

Y el segundo concepto, las corrutinas con concurrencia estructurada:

coroutineScope {                       // ← el ÁMBITO es la clave
    val a = async { pedirUsuario() }
    val b = async { pedirPedidos() }
    procesar(a.await(), b.await())
}   // si algo falla aquí dentro, se CANCELA todo lo lanzado en este ámbito

La concurrencia estructurada significa que una tarea no puede sobrevivir al ámbito que la lanzó (clase 135). Eso elimina de raíz las tareas huérfanas y las cancelaciones a medias, que son el problema clásico del código asíncrono — y es una idea que después han adoptado Java (Loom), Swift y Python.

Y hay una tercera cosa que Kotlin hace especialmente bien y que la clase 163 aprovecha: los DSL.

dependencies {                 // ← esto es Kotlin, no un formato de configuración
    implementation("org.jetbrains:annotations:24.0.0")
}

Las lambdas con receptor y las funciones de extensión permiten construir lenguajes de dominio que parecen configuración y están comprobados por el compilador — que es lo que Gradle usa.

🔄 Lo que se ha modernizado

⚙️ Cómo se ejecuta hoy

kotlinc main.kt -include-runtime -d venta.jar && java -jar venta.jar
kotlin main.kts                                     # como guion, sin compilar

./gradlew build test                                 # lo habitual (clases 143 y 147)
./gradlew ktlintCheck detekt                          # estilo y análisis (clase 146)

🧪 El programa de la clase 041 en Kotlin

fun main() {
    val (precio, cantidad, descuento) = readLine()!!.split(" ").map { it.toDouble() }
    val total = precio * cantidad * (1 - descuento)
    println("Total: %.2f".format(total))
}

Lo que hay que ver, comparando con Java línea a línea.

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: Java · Scala · Swift · Groovy · C#