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}"
endmap
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
