En Ruby, los iteradores son métodos que permiten recorrer colecciones de datos como arrays y hashes de manera eficiente y elegante. Los iteradores son una parte fundamental del lenguaje y se utilizan ampliamente para realizar operaciones repetitivas sobre colecciones.
Conceptos Clave
- Iteradores Básicos:
each
,map
,select
,reject
,reduce
. - Bloques: Código que se pasa a los iteradores para que se ejecute en cada elemento de la colección.
- Enumerables: Módulo que proporciona métodos iterativos a las clases que incluyen este módulo.
Iteradores Básicos
each
El iterador each
es uno de los más comunes y se utiliza para recorrer cada elemento de una colección.
# Ejemplo con un array [1, 2, 3, 4, 5].each do |num| puts num end # Ejemplo con un hash {a: 1, b: 2, c: 3}.each do |key, value| puts "#{key}: #{value}" end
map
El iterador map
se utiliza para transformar cada elemento de una colección y devolver un nuevo array con los resultados.
# Ejemplo con un array squared_numbers = [1, 2, 3, 4, 5].map do |num| num ** 2 end puts squared_numbers.inspect # => [1, 4, 9, 16, 25]
select
El iterador select
se utiliza para filtrar elementos de una colección que cumplen con una condición específica.
# Ejemplo con un array even_numbers = [1, 2, 3, 4, 5].select do |num| num.even? end puts even_numbers.inspect # => [2, 4]
reject
El iterador reject
es lo opuesto a select
; filtra elementos que no cumplen con una condición específica.
# Ejemplo con un array odd_numbers = [1, 2, 3, 4, 5].reject do |num| num.even? end puts odd_numbers.inspect # => [1, 3, 5]
reduce
El iterador reduce
(también conocido como inject
) se utiliza para acumular todos los elementos de una colección en un solo valor.
# Ejemplo con un array sum = [1, 2, 3, 4, 5].reduce(0) do |accumulator, num| accumulator + num end puts sum # => 15
Bloques
Los bloques son fragmentos de código que se pasan a los métodos iteradores. Pueden ser definidos utilizando do...end
o llaves {...}
.
# Usando do...end [1, 2, 3].each do |num| puts num end # Usando llaves [1, 2, 3].each { |num| puts num }
Enumerables
El módulo Enumerable
proporciona una colección de métodos iterativos que pueden ser incluidos en clases como Array
y Hash
.
# Ejemplo de uso del módulo Enumerable class CustomCollection include Enumerable def initialize(collection) @collection = collection end def each(&block) @collection.each(&block) end end custom_collection = CustomCollection.new([1, 2, 3, 4, 5]) puts custom_collection.map { |num| num * 2 } # => [2, 4, 6, 8, 10]
Ejercicios Prácticos
Ejercicio 1: Uso de each
Escribe un programa que imprima cada elemento de un array de nombres.
Ejercicio 2: Uso de map
Escribe un programa que tome un array de números y devuelva un nuevo array con cada número multiplicado por 10.
numeros = [1, 2, 3, 4, 5] numeros_por_diez = numeros.map do |num| num * 10 end puts numeros_por_diez.inspect # => [10, 20, 30, 40, 50]
Ejercicio 3: Uso de select
Escribe un programa que filtre los números impares de un array.
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] numeros_impares = numeros.select do |num| num.odd? end puts numeros_impares.inspect # => [1, 3, 5, 7, 9]
Ejercicio 4: Uso de reduce
Escribe un programa que calcule el producto de todos los números en un array.
numeros = [1, 2, 3, 4, 5] producto = numeros.reduce(1) do |acc, num| acc * num end puts producto # => 120
Conclusión
En esta sección, hemos explorado los iteradores en Ruby, que son herramientas poderosas para trabajar con colecciones de datos. Hemos aprendido sobre los iteradores básicos como each
, map
, select
, reject
y reduce
, así como el uso de bloques y el módulo Enumerable
. Estos conceptos son fundamentales para escribir código Ruby eficiente y elegante. En la próxima sección, profundizaremos en la programación orientada a objetos en Ruby.
Curso de Programación en Ruby
Módulo 1: Introducción a Ruby
Módulo 2: Conceptos Básicos de Ruby
Módulo 3: Trabajando con Colecciones
Módulo 4: Programación Orientada a Objetos en Ruby
- Clases y Objetos
- Variables y Métodos de Instancia
- Variables y Métodos de Clase
- Herencia
- Módulos y Mixins
Módulo 5: Conceptos Avanzados de Ruby
- Bloques, Procs y Lambdas
- Metaprogramación
- Manejo de Excepciones
- Entrada/Salida de Archivos
- Expresiones Regulares
Módulo 6: Introducción a Ruby on Rails
- ¿Qué es Ruby on Rails?
- Configuración del Entorno Rails
- Creando una Aplicación Simple en Rails
- Arquitectura MVC
- Enrutamiento
Módulo 7: Pruebas en Ruby
- Introducción a las Pruebas
- Pruebas Unitarias con Minitest
- Desarrollo Guiado por Comportamiento con RSpec
- Mocking y Stubbing
Módulo 8: Mejores Prácticas en Ruby
- Estilo de Código y Convenciones
- Refactorización
- Optimización del Rendimiento
- Mejores Prácticas de Seguridad