La metaprogramación y los lenguajes dinámicos
Title | La metaprogramación y los lenguajes dinámicos |
Publication Type | Web Article |
Year of Publication | 2008 |
Authors | Wolf G |
Access Date | 2009/03/27 |
Keywords | Metaprogramación, programación, Ruby |
Abstract | La metaprogramación es una técnica muy poderosa, y muy socorrida en el terreno de los lenguajes dinámicos. Puede llevarnos a reducir muy fuertemente el total de código que escribimos - Y lo que es mucho más importante, a minimizar la cantidad de código repetido innecesariamente. Nos lleva claramente a aumentar la calidad y mantenibilidad de nuestro código. |
URL | http://www.sg.com.mx/content/view/718/1/ |
Full Text | La metaprogramación es una técnica muy poderosa, y muy socorrida en el terreno de los lenguajes dinámicos. Puede llevarnos a reducir muy fuertemente el total de código que escribimos - Y lo que es mucho más importante, a minimizar la cantidad de código repetido innecesariamente. Nos lleva claramente a aumentar la calidad y mantenibilidad de nuestro código. Programas que escriben programasLa metaprogramación consiste en escribir código que no ataca directamente al dominio del problema que queremos atacar, sino que al código que lo resolvería. Dicho sea de otro modo, el código que escribimos no modifica los datos o el estado de nuestra información, sino que el del programa. Las ventajas de los lenguajes dinámicosLa metaprogramación no es una nueva idea - Nació hace ya más de 40 años, con el lenguaje Lisp, y se popularizó tremendamente en el lenguaje Smalltalk, a principios de los 80.
Al invocar a este método -claro está, en tiempo de ejecución- puedo ampliar la jerarquía de clases existente. Por ejemplo, si quiero definir suficientes clases para representar los muebles de una oficina, podría decirle a Ruby:
Obviamente, la lista de objetos no necesariamente la tengo representada en mi código fuente - puede ser proporcionada por el usuario o determinada a partir del entorno de ejecución. Y a partir de este punto, para todos los propósitos de nuestro código, sería como si en tiempo de compilación hubiéramos incluido explícitamente en el código:
Pero esto va mucho más allá de una manera cómoda y reducida de especificar clases.
ActiveRecord es el ORM de Ruby on Rails - presenta una abstracción de los datos en las tablas de la base de datos, dándoles una interfaz natural orientada a objetos. El módulo ActiveRecord::Validations::ClassMethods extiende al lenguaje a través de la metaprogramación, y expone una serie de validadores, que presentan una sintaxis natural de escribir y fácil de leer - Un lenguaje específico al dominio de las validaciones. ReflectividadLa mayor parte de los lenguajes dinámicos son también reflectivos. Los objetos (y, recuerden, en los lenguajes completamente orientados a objetos, todo es un objeto - Incluyendo las clases, no sólo los objetos instanciados) pueden ser interrogados respecto a los métodos que ofrecen. Un ejemplo simple que muestra el poder combinado de la reflectividad junto con la metaprogramación es este simple rastreador universal:
Basta llamar a nuestra función «trace» con cualquier objeto del sistema para que nos muestre un rastreo completo de cada una de las acciones que éste realice. Por ejemplo (desde la consola interactiva de Ruby):
Aquí podemos encontrar cómo es que incluso la misma clase Person (que no es otra que la que declaramos hace algunas líneas) recibe sus métodos: ¡A través de la reflexibilidad, preguntándole a la base de datos acerca de su propia estructura! |
Attachment | Size |
---|---|
200805_softwareguru_1.jpg | 496.65 KB |
200805_softwareguru_2.jpg | 469.31 KB |
200805_softwareguru_3.jpg | 145.62 KB |
- Printer-friendly version
- 23139 reads
- Tagged
- XML
- BibTex
- Google Scholar