Módulo Enumerable

El módulo Enumerable es una de las características más poderosas y útiles de Ruby. Proporciona una colección de métodos que se pueden usar con cualquier clase que incluya el módulo Enumerable. Este módulo es especialmente útil para trabajar con colecciones como arrays y hashes.

¿Qué es el Módulo Enumerable?

El módulo Enumerable incluye métodos que permiten iterar, buscar, ordenar y manipular colecciones de datos. Para que una clase pueda usar estos métodos, debe incluir el módulo Enumerable y definir el método each.

Métodos Comunes del Módulo Enumerable

A continuación, se presentan algunos de los métodos más comunes y útiles del módulo Enumerable:

  1. each: Itera sobre cada elemento de la colección.
  2. map: Transforma cada elemento de la colección según el bloque dado.
  3. select: Filtra los elementos de la colección que cumplen con la condición del bloque.
  4. reject: Filtra los elementos de la colección que no cumplen con la condición del bloque.
  5. find: Encuentra el primer elemento que cumple con la condición del bloque.
  6. reduce: Combina todos los elementos de la colección en un solo valor según el bloque dado.

Ejemplos Prácticos

Método each

El método each es fundamental en Ruby y se utiliza para iterar sobre cada elemento de una colección.

[1, 2, 3, 4, 5].each do |number|
  puts number
end

Explicación: Este código imprimirá cada número del array [1, 2, 3, 4, 5].

Método map

El método map transforma cada elemento de la colección según el bloque dado y devuelve un nuevo array con los resultados.

squared_numbers = [1, 2, 3, 4, 5].map do |number|
  number ** 2
end
puts squared_numbers.inspect

Explicación: Este código elevará al cuadrado cada número del array y devolverá un nuevo array [1, 4, 9, 16, 25].

Método select

El método select filtra los elementos de la colección que cumplen con la condición del bloque.

even_numbers = [1, 2, 3, 4, 5].select do |number|
  number.even?
end
puts even_numbers.inspect

Explicación: Este código seleccionará solo los números pares del array, devolviendo [2, 4].

Método reject

El método reject es lo opuesto a select. Filtra los elementos que no cumplen con la condición del bloque.

odd_numbers = [1, 2, 3, 4, 5].reject do |number|
  number.even?
end
puts odd_numbers.inspect

Explicación: Este código rechazará los números pares, devolviendo [1, 3, 5].

Método find

El método find devuelve el primer elemento que cumple con la condición del bloque.

first_even = [1, 2, 3, 4, 5].find do |number|
  number.even?
end
puts first_even

Explicación: Este código encontrará y devolverá el primer número par, que es 2.

Método reduce

El método reduce combina todos los elementos de la colección en un solo valor según el bloque dado.

sum = [1, 2, 3, 4, 5].reduce(0) do |accumulator, number|
  accumulator + number
end
puts sum

Explicación: Este código sumará todos los números del array, devolviendo 15.

Ejercicio Práctico

Ejercicio: Dado un array de números, usa los métodos del módulo Enumerable para realizar las siguientes tareas:

  1. Encuentra todos los números impares.
  2. Eleva al cuadrado cada número.
  3. Encuentra el primer número mayor que 10.
  4. Calcula la suma de todos los números.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. Encuentra todos los números impares
odd_numbers = numbers.select { |number| number.odd? }
puts "Números impares: #{odd_numbers.inspect}"

# 2. Eleva al cuadrado cada número
squared_numbers = numbers.map { |number| number ** 2 }
puts "Números al cuadrado: #{squared_numbers.inspect}"

# 3. Encuentra el primer número mayor que 10
first_greater_than_ten = squared_numbers.find { |number| number > 10 }
puts "Primer número mayor que 10: #{first_greater_than_ten}"

# 4. Calcula la suma de todos los números
sum_of_numbers = numbers.reduce(0) { |accumulator, number| accumulator + number }
puts "Suma de todos los números: #{sum_of_numbers}"

Solución del Ejercicio

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. Encuentra todos los números impares
odd_numbers = numbers.select { |number| number.odd? }
puts "Números impares: #{odd_numbers.inspect}"

# 2. Eleva al cuadrado cada número
squared_numbers = numbers.map { |number| number ** 2 }
puts "Números al cuadrado: #{squared_numbers.inspect}"

# 3. Encuentra el primer número mayor que 10
first_greater_than_ten = squared_numbers.find { |number| number > 10 }
puts "Primer número mayor que 10: #{first_greater_than_ten}"

# 4. Calcula la suma de todos los números
sum_of_numbers = numbers.reduce(0) { |accumulator, number| accumulator + number }
puts "Suma de todos los números: #{sum_of_numbers}"

Conclusión

El módulo Enumerable es una herramienta poderosa en Ruby que facilita la manipulación y el procesamiento de colecciones de datos. Al dominar los métodos each, map, select, reject, find y reduce, podrás escribir código más limpio, eficiente y expresivo. Practica estos métodos con diferentes colecciones para familiarizarte con su uso y descubrir cómo pueden simplificar tus tareas de programación diarias.

© Copyright 2024. Todos los derechos reservados