Kotlin, el lenguaje de Jetbrains para la JVM, se vuelve open source
martes, febrero 14, 2012 at 4:58PM
ecamacho in JVM, jetbrains, jvm, kotlin

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

 

 

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.

Article originally appeared on javaHispano (http://www.javahispano.org/).
See website for complete article licensing information.