Junior
¿Para qué se utilizan los módulos en Ruby?
sobes.tech AI
Respuesta de la IA
Los módulos en Ruby se utilizan para dos propósitos principales:
-
Namespaces (Espacios de nombres): Organización del código para evitar conflictos de nombres. Permiten agrupar clases, métodos y constantes relacionados bajo un mismo nombre. Esto ayuda a evitar situaciones en las que dos clases o métodos diferentes tengan el mismo nombre.
# module_for_namespace.rb module MiFramework class Validador def validar(datos) # lógica de validación end end end # otro_archivo.rb # Para usar Validador de MiFramework: validador = MiFramework::Validador.new validador.validar("algunos datos") -
Mixins (Mezclas): Mecanismo para compartir funcionalidad (métodos) entre varias clases sin usar herencia clásica. Los módulos se incluyen en clases mediante
includeoprepend.include: Los métodos del módulo están disponibles en las instancias de la clase y pueden ser sobrescritos en la misma clase. La búsqueda de métodos sigue el orden: clase actual, módulo incluido, superclases.prepend: Inserta el módulo en la cadena de herencia antes de la clase. Los métodos del módulo tienen prioridad sobre los métodos de la clase.
Ejemplo de uso de
include:# mixin_module.rb module Loggable def log(mensaje) puts "[LOG] #{mensaje}" end end # class_using_mixin.rb class MiClase include Loggable # Incluimos el módulo Loggable def procesar_datos log("Procesando datos...") # Usamos método del módulo # resto de la lógica end end obj = MiClase.new obj.procesar_datosEjemplo de uso de
prepend:# mixin_module.rb module MiModuloPrependido def saludar puts "¡Hola desde el módulo!" end end # class_with_prepend.rb class MiClasePrepend prepend MiModuloPrependido # El módulo precede a la clase en la cadena de herencia def saludar puts "¡Hola desde la clase!" end end obj = MiClasePrepend.new obj.saludar # Mostrará "¡Hola desde el módulo!" porque el método del módulo tiene prioridad
Los módulos no pueden ser instanciados (no se puede crear un objeto de un módulo) y no tienen una cadena de herencia en el mismo sentido que las clases.