Game Of Life en Ceylon

En el Code Retreat que hubo en Agosto de 2012, el reto fue implementar el famoso Game of Life, en parejas. En mi equipo, @juwe y yo lo desarrollamos en Ceylon (no me impuse; él se animó, jejej).

Apenas hoy lo pude subir a un repositorio que tenemos en GitHub especialmente para ejemplos de Ceylon, después de darle una buena actualizada al código porque han habido varios cambios en la sintaxis y en el módulo de lenguaje desde que escribimos esto originalmente: ya teníamos comprensiones, funciones de orden superior, funciones anónimas y varias otras cosas, pero no teníamos por ejemplo el assert, tuplas, ni la sintaxis actual para secuencias y colecciones iterables; la sintaxis para funciones anónimas cambió ligeramente, al igual que la de parámetros variádicos (los famosos varargs).

La aplicación es bastante sencilla: tiene dos clases principales: Matrix y Cell. La matriz realmente maneja todas sus celdas en una secuencia (una lista no vacía) pero sabe que debe medir un determinado número de columnas y filas (es cuadrada), con lo cual puede determinar qué celdas están arriba y abajo de alguna en particular, no solamente las que tiene a su izquierda y derecha.

Incluye unas pruebas sencillas para verificar que la matriz se comporta como debe, y finalmente se puede ejecutar la aplicación para desplegarse en Swing. Pero en Mac OS X tiene un problema y no se puede ejecutar desde la línea de comando, debido a un problema con las clases de LookAndFeel de Swing para Mac; sin embargo si lo ejecutan desde el IDE no deben tener ningún problema.

El código lo pueden ver aquí: https://github.com/ceylon/ceylon-examples

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Y ahora en JavaScript

Hice un refactoring de este ejemplo, para separar por completo la lógica de la interfaz gráfica, y así poder usar la lógica tanto en JVM usando Swing como estaba originalmente, y ahora además en JavaScript, en una página HTML.

Con esto se muestra además un poco de la interoperabilidad entre Ceylon y JavaScript.

Para poder ejecutar esto se necesitan las versiones más recientes del compilador y módulo de lenguaje, ya que utiliza algo nuevo en Ceylon: el bloque dynamic.

UPDATE He hecho un gist con el código para poderlo correr en el web IDE de Ceylon: https://gist.github.com/chochos/5052213 pero mientras no actualicemos el web IDE oficial a la versión M5 (que será cuando saquemos esa versión), sólo se puede probar en el sitio beta: https://trybeta-ceylon.rhcloud.com/

compñartir

Puede compartir el archivo

Imagen de ezamudio

GIST

Cuál archivo?

Si quieres el código fuente, hay una versión vieja en el link al gist que está en el comentario al que respondiste, y la versión actualizada se encuentra en try.ceylon-lang.org