El curioso comportamiento de class en Ruby y el monkey patching

2010 marzo 30
por rafadc

Una de las características que hacen a Ruby más útil es la capacidad para dinamizar el lenguaje. Una de ellas son las Open Classes y es, creo, lo más chocante cuando te enfrentas por primera vez a código Ruby. Vamos a explicar lo que signifca el concepto de Open Classes con un ejemplo sencillísimo.


class String

def myMethod

printf "Hi!"

end

end

"A string".myMethod

Como podeis ver es fácil extender clases existentes añadiéndoles nuevos métodos. Seguro que si habéis utilizado alguna gem vereis que se añaden métodos a clases ya existentes como por ejemplo algún comparador. Pues bien, así es como se hace.

Seguro que muchos según habéis leído esto os habéis llevado las manos a la cabeza pensando: “¡Recristo! ¡La que se puede armar con esto!”. Pues tenéis razón. Con esto se pueden armar unos circos importantes. Si no se utiliza con control puedes acabar con una clase cuyo código está expandido entre cientos de ficheros y cuyo comportamiento nunca está claro ya que la misma función ha sido sobrecargada en ciertos de sitios. A la práctica de abusar del dinamismo de lenguajes como ruby o scala se le suele llamar monkey patching.

Well, I was just totally sold by Adam, the idea being that if it walks like a duck and talks like a duck, it’s a duck, right? So if this duck is not giving you the noise that you want, you’ve got to just punch that duck until it returns what you expect.

- Patrick Ewing (no es el jugador de baloncesto)

Hay que pensar en las open classes como “peligrosas” al menos pero sin ellas no sería ni mucho menos fácil crear maravillas como el Active Record de rails.

No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS

Switch to our mobile site