Kotlin, el lenguaje de Jetbrains para la JVM, se vuelve open source
JetBrains ha anunciado que libera Kotlin, su lenguaje para la JVM y para javascript, bajo la licencia Apache 2. Este lenguaje ha venido siendo desarrollado por la empresa desde 2010 y ha alcanzando un importante punto de maduración que ha convencido a sus creadores de liberarlo.
Kotlin es un lenguaje de tipado estático que compila a bytecode de la JVM y a javascript, la empresa originalmente lo creó para aumentar su productividad. Como sabéis, Jetbrains desarrolla varios IDEs, entre ellos IntelliJ IDEA, sobre la JVM así que Kotlin fue su "mejora" a la JVM para auxiliarles en dicha tarea.
De acuerdo a su documentación, los principios de diseño que siguieron en Kotlin son
- Crear un lenguaje compatible con Java que compile al menos tan rápido como Java,
- que sea más seguro que Java, por ejemplo que revise automáticamente referencias a nulos,
- que sea más conciso que Java,soportando inferencia de tipos, closures, funciones de extensión, código en interfases y delegados de primera clase
- y que sea expresivo, haciéndolo lo más simple posible.
Como no puede faltar, aquí el Hola Mundo en Kotlin:
fun main(args : Array) { println("Hello, world!") }
Kotlin incorpora funcionalidades que no están en Java, un ejemplo, soporta módulos usando el sistema de dependencias a Maven y con un DSL para describirlos, un poco parecido a como se hace con Gradle:
val homeDir = "..." module("org.jetbrains.test") { depends(MavenRepo["junit.junit@4.8.2"]) importNamespace("java.lang") importNamespace("org.junit") sourceRoot("$homeDir/src") testSourceRoot("$homeDir/tests") }
En Kotlin, las variables puedes ser inmutables o mutables dependiendo de como se declaran, de igual forma que en Scala:
var a : String = "abc" a = "def" //ok val b : String = "abc" b = "def" //Error en compilación
Kotlin es más seguro para gestionar nulos, una variable no puede ser nula a menos que se declare así, por ejemplo:
var a : String = "abc" a = null //causa error de compilación
Pero esto si compila:
var b : String? = "abc" b = null
Cuando sabes que una variable puede ser nula puedes hacer uso del operador ?. (igual a como funciona en Groovy) para evitar NPEs:
b.length // puede darte un NPE b?.length //es una llamada segura, si el objeto es nulo no lanzará un NPE
Otro tema que me llamó la atención es que tienen soporte a Pattern Matching, una de las características más apreciadas de Scala, aunque aquí se usa con una sintaxis diferente:
when (x) { is Int -> print(x) is List -> print(x.sum()) !is Number -> print("Not even a number") else -> print("can't do anything") }
Y por último en este breve tour de Kotlin, las funciones de Extensión son basadas a las que existen en C# y que permiten agregar métodos a clases ya existentes sin modificar su código fuente. Por ejemplo, aquí se agrega el método swap a java.util.List:
fun List.swap(x : Int, y : Int) { val tmp = this[x] // 'this' corresponds to the list this[x] = this[y] this[y] = tmp }
Y se puede usar como sigue:
val l = list(1, 2, 3) l.swap(0, 2) // 'this' inside 'swap()' will hold the value of 'l'
Como veis, Kotlin incorpora características de varios lenguajes pero de de una forma más simple que por ejemplo Scala o el mismo Java. Como no podía faltar, cuenta con un plugin para IDEA. El lenguaje sigue en desarrollo pero ya puedes usarlo si lo instalas de este enlace o puedes probarlo directamente en la Web Console que se han creado para ello.
Reader Comments (1)
Sería una locura por su parte que no fuera opensource si quieren que gane popularidad el lenguaje. Todos los lenguajes nuevos sobre la JVM son opensource y la batalla será dura :)
Cuanto más trasparente sea su integración con el ecosistema java (ides, librerías, etc) más probabilidades tendrá de tomar relevancia.
Personalmente, tanto a Kotlin como a Dart les auguro un buen futuro.