El Monkey Patching en Ruby permite modificar o extender el comportamiento de clases y módulos existentes, incluyendo los del propio lenguaje o de bibliotecas externas. Es una técnica poderosa que se utiliza para añadir funcionalidades o corregir errores sin modificar directamente el código original. Sin embargo, su uso debe ser cauteloso, ya que puede introducir conflictos o comportamientos inesperados si no se controla adecuadamente.
El Monkey Patching consiste en redefinir métodos o agregar nuevos métodos a clases ya definidas. Esto se hace abriendo la clase o módulo que se desea modificar y escribiendo el nuevo código dentro de esa redefinición.
Supongamos que queremos agregar un método shout
a la clase String
para que convierta el texto a mayúsculas y agregue signos de exclamación:
class String
def shout
"#{self.upcase}!!!"
end
end
puts "hola".shout # Output: "HOLA!!!"
Podemos también cambiar el comportamiento de métodos existentes. Por ejemplo, redefinir +
en la clase Integer
para que realice una multiplicación en lugar de una suma:
class Integer
def +(other)
self * other
end
end
puts 2 + 3 # Output: 6 (2 * 3 en lugar de 2 + 3)
Imaginemos que tenemos una biblioteca que no tiene soporte para un método específico. Podemos aplicar un Monkey Patch para incluir esta funcionalidad de manera temporal hasta que la biblioteca se actualice:
module ThirdPartyModule
class Example
def greet
"Hello"
end
end
end
# Monkey Patching para modificar el saludo
module ThirdPartyModule
class Example
def greet
"Hola desde el parche"
end
end
end
puts ThirdPartyModule::Example.new.greet # Output: "Hola desde el parche"
Para más detalles y prácticas recomendadas, visita la documentación oficial de Ruby sobre la apertura de clases y la modificación de módulos.
Jorge García
Fullstack developer