Conclusiones y más documentación

Bloques e iteradores ¿Has querido alguna vez escribir tus propias estructuras de control, o empaquetar trozos de código dentro de un objeto? Los bloques de código de Ruby te permiten hacer justamente eso. Un bloque es simplemente un trozo de código entre llaves, o entre las palabras clave do y end. Cuando Ruby llega a un bloque, almacena el código del bloque para más tarde; el bloque no es ejecutado. De esta forma, un bloque es similar a un método anónimo. Los bloques sólo pueden aparecer en un fuente Ruby junto a llamadas a métodos. Un bloque asociado con una llamada a un método pueden ser invocado desde dentro de ese método. Esto puede parecer inocuo, pero esta sola facilidad te permite escribir callbacks y adaptadores, manejadores de transacciones, e implementar tus propios iteradores. Los bloques son además verdaderas clausuras, que recuerdan el contexto en el que fueron definidos, incluso si el contexto se ha salido del ámbito. Veamos los bloques simplemente como iteradores por ahora.

Módulos, Mezclas y Herencia Múltiple Los módulos son clases que no puedes instanciar: no puedes usar new para crear objetos desde ellos, y no pueden tener superclases. De entrada, parecen inútiles, pero en realidad los módulos tienen dos usos principales. Los módulos proporcionan un espacio de nombres. Las constantes y los métodos de clase pueden ser colocados en un módulo sin preocuparse de conflictos de nombre con constantes y métodos de otras clases en otros módulos. Esto es similar a la idea de utilizar métodos y variables estáticas en una clase de Java. En Java y Ruby puedes escribir Math.PI para acceder al valor de (aunque en Ruby, PI es una constante, en lugar de una variable final, y verás más comúnmente la notación Math::PI). Los módulos son además la base de las mezclas5, un mecanismo por el cual puedes añadir comportamiento ``enlatado'' a tus clases. Quizás la forma más fácil de pensar sobre las mezclas es imaginar que puedes escribir código en una interface de Java. Toda clase que implementa esa interface no sólo puede recibir un tipo de signatura; también puede recibir el código que implementa la signatura. Podemos investigar esto observando el módulo Enumerable, que añade métodos basados en colecciones a clases que implementan el método each.

Otro buen material Este artículo es demasiado corto para hacer justicia a todo lo que ofrece Ruby. No obstante, daremos un breve toque a algunas otras cuestiones a destacar. Las clases y los módulos nunca están cerrados. Puedes añadir y alterar cosas de todas las clases y módulos (incluso aquellos creados de fábrica en el mismo Ruby). Reflexiones. Además de soportar la reflexión en clases y objetos individuales, Ruby te permite recorrer la lista de objetos actualmente activos. Marshalling. Los objetos de Ruby pueden ser ``serializados'' y ``des-serializados'', permitiendo ser almacenados externamente y transmitidos a través de redes. Un completo sistema de objetos distribuidos, DRb, está escrito en alrededor de 200 líneas de código Ruby. Librerías. Ruby tiene una gran (y creciente) colección de librerías. Todos los protocolos principales de Internet están soportados, así como la mayoría de las principales bases de datos. Extender Ruby es simple comparado con (digamos) Perl. Hilos. Ruby tiene soporte interno para hilos, y no requiere del sistema operativo subyacente para soportar los hilos. Especialización de objetos. Puedes añadir métodos a objetos individuales, no sólo a clases. Esto puede ser útil cuando se definen comportamientos especializados para objetos (por ejemplo, determinando cómo deben responder a eventos del GUI). Excepciones. Ruby tiene un modelo de excepciones completamente orientado a objetos, y extensible. Recogida de basura. Los objetos Ruby son automáticamente eliminados de la memoria mediante un algoritmo de marcar-y-barrer. Además de simplificar la programación, la elección de marcar y barrer permite que la escritura de extensiones sea más sencilla (no hay problemas de conteo de referencias). Comunidad activa de desarrolladores. La comunidad de desarrolladores de Ruby es aún un bazar, pequeño, íntimo y bullicioso. Los cambios son discutidos abiertamente y se realizan eficientemente. Puedes tener impacto sobre Ruby.

Conclusión Programar en Ruby es una experiencia inmensamente satisfactoria --el lenguaje parece ser capaz de representar conceptos de alto nivel de manera concisa, eficiente y legible. Es fácil de aprender, y al mismo tiempo es bastante profundo incluso para el más agotado recolector de lenguajes. Descarga una copia y pruébalo por tí mismo. Creemos que te gustará.

Ligas Importantes

Página Oficial de Ruby

RubyCentral everything to do with the Ruby language.

Bibliografía

David Thomas y Andrew Hunt, Programming Ruby The Pragmatic Programmer's Guide, 1a edición, Addison Wesley Longman, Inc., octubre de 2000, xxxx-xxx-x, disponible en Programming Ruby--The Book .