La semana pasada en Devox se anunciaron las versiones estables de dos lenguajes de programación: Ceylon de Red Hat y Dart de Google. Ceylon es un nuevo lenguaje de tipado estático y con inferencia de tipos que se ejecuta sobre la máquina virtual Java. Este lenguaje ha sido creado por Gavin King, creador de Hibernate.
El propósito de Ceylon es mejorar deficiencias de Java, aunque a la vez pretende no ser excluyente con Java; según Gavin King, el espera que las aplicaciones Ceylon también tengan código escrito en Java y en JavaScript. Aquí tenéis un pequeño fragmento de código en Ceylon:
value list = { 0, "uno", 2, "tres", 4, "cinco" }; for (elem in list) { if (is Integer elem) { if (elem % 2 == 1) { print("Encontramos el número impar!"); break; } } } else { print("Sólamente hay números pares en la secuencia"); }
En Devox también se anunció el SDK 1.0 de Dart, un lenguaje creado por Google que pretende ser una versión mejorada de JavaScript. Dart es un lenguaje completamente orientado a objetos, basado en clases, con herencia simple y con tipado opcional (lo cual viene a significar que tiene tipado dinámico pero si el programador quiere puede especificar tipos). Dart puede compilarse a JavaScript, y por tanto puede ser ejecutado por esta ruta en cualquier navegador web moderno. Además, puede ejecutarse en su propia máquina virtual, aunque ahora mismo sólo Chrome tiene soporte para ejecutarlo de este modo.
Una crítica que se le puede hacer a Dart es que trata de resolver un problema que quizá ya no exista; trata de mejorar JavaScript, pero la realidad es que a día de hoy muy poca gente escribe directamente código en este lenguaje, sino que se suelen usar librerías del estilo de jQuery que mejoran bastante la experiencia del desarrollador. Aquí tenéis un ejemplo de una clase en Dart:
class Point { Point(this.x, this.y); distanceTo(Point other) { var dx = x - other.x; var dy = y - other.y; return Math.sqrt(dx * dx + dy * dy); } var x, y; }
Y aquí un ejemplo de una interfaz:
interface Shape { num perimeter(); } class Rectangle implements Shape { final num height, width; Rectangle(num this.height, num this.width); num perimeter() => 2*height + 2*width; }