En Ruby, los módulos son una forma de agrupar métodos, clases y constantes. Los módulos no pueden ser instanciados, pero pueden ser incluidos en clases para compartir funcionalidad. Los mixins son una técnica que utiliza módulos para compartir código entre clases.

¿Qué es un Módulo?

Un módulo es una colección de métodos y constantes. A diferencia de las clases, los módulos no pueden ser instanciados ni heredados. Se utilizan principalmente para agrupar métodos relacionados y compartir funcionalidad entre clases.

Definición de un Módulo

module MiModulo
  CONSTANTE = 100

  def self.metodo_de_clase
    puts "Este es un método de clase en un módulo"
  end

  def metodo_de_instancia
    puts "Este es un método de instancia en un módulo"
  end
end

En este ejemplo, MiModulo contiene una constante CONSTANTE, un método de clase metodo_de_clase y un método de instancia metodo_de_instancia.

Uso de Módulos

Para acceder a los métodos de clase y constantes de un módulo, utilizamos la sintaxis de punto (.).

puts MiModulo::CONSTANTE
MiModulo.metodo_de_clase

Mixins

Los mixins son una forma de incluir métodos de un módulo en una clase. Esto se hace utilizando las palabras clave include o extend.

include vs extend

  • include: Incluye los métodos de instancia del módulo en la clase.
  • extend: Incluye los métodos de clase del módulo en la clase.

Ejemplo de include

module Habilidades
  def correr
    puts "Estoy corriendo"
  end

  def saltar
    puts "Estoy saltando"
  end
end

class Persona
  include Habilidades
end

persona = Persona.new
persona.correr  # Salida: Estoy corriendo
persona.saltar  # Salida: Estoy saltando

Ejemplo de extend

module HabilidadesDeClase
  def habilidades_de_clase
    puts "Método de clase en el módulo"
  end
end

class Persona
  extend HabilidadesDeClase
end

Persona.habilidades_de_clase  # Salida: Método de clase en el módulo

Ejercicio Práctico

Ejercicio 1: Crear un Módulo y Usarlo en una Clase

  1. Define un módulo llamado Saludable que tenga dos métodos: comer y dormir.
  2. Crea una clase llamada Animal que incluya el módulo Saludable.
  3. Instancia un objeto de la clase Animal y llama a los métodos comer y dormir.

Solución

module Saludable
  def comer
    puts "Estoy comiendo"
  end

  def dormir
    puts "Estoy durmiendo"
  end
end

class Animal
  include Saludable
end

animal = Animal.new
animal.comer  # Salida: Estoy comiendo
animal.dormir  # Salida: Estoy durmiendo

Ejercicio 2: Usar extend para Métodos de Clase

  1. Define un módulo llamado Utilidades que tenga un método de clase informacion.
  2. Crea una clase llamada Vehiculo que extienda el módulo Utilidades.
  3. Llama al método informacion desde la clase Vehiculo.

Solución

module Utilidades
  def informacion
    puts "Este es un método de clase en el módulo"
  end
end

class Vehiculo
  extend Utilidades
end

Vehiculo.informacion  # Salida: Este es un método de clase en el módulo

Resumen

En esta sección, hemos aprendido sobre los módulos y mixins en Ruby. Los módulos son una forma de agrupar métodos y constantes, y no pueden ser instanciados. Los mixins permiten compartir funcionalidad entre clases utilizando include para métodos de instancia y extend para métodos de clase. Estos conceptos son fundamentales para escribir código Ruby modular y reutilizable.

En el próximo tema, exploraremos conceptos avanzados de Ruby, como bloques, procs y lambdas.

© Copyright 2024. Todos los derechos reservados