Els iteradors són una part fonamental de Ruby i permeten recórrer col·leccions com arrays i hashes de manera eficient i elegant. En aquesta secció, aprendrem què són els iteradors, com utilitzar-los i veurem alguns dels iteradors més comuns en Ruby.

Què és un Iterador?

Un iterador és un mètode que repeteix una operació sobre cada element d'una col·lecció. En Ruby, els iteradors són sovint implementats com a mètodes que prenen blocs de codi com a arguments.

Iteradors Comuns en Ruby

each

El mètode each és probablement l'iterador més utilitzat en Ruby. Permet recórrer cada element d'una col·lecció i executar un bloc de codi per a cada element.

Exemple amb Arrays

numbers = [1, 2, 3, 4, 5]

numbers.each do |number|
  puts number
end

Explicació:

  • numbers és un array.
  • each recorre cada element de l'array.
  • El bloc do |number| ... end s'executa per a cada element, assignant l'element actual a la variable number.

Exemple amb Hashes

person = { name: "Alice", age: 30, city: "Barcelona" }

person.each do |key, value|
  puts "#{key}: #{value}"
end

Explicació:

  • person és un hash.
  • each recorre cada parella clau-valor del hash.
  • El bloc do |key, value| ... end s'executa per a cada parella, assignant la clau a key i el valor a value.

map

El mètode map crea un nou array amb els resultats de l'execució d'un bloc de codi sobre cada element de l'array original.

Exemple

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

puts squared_numbers.inspect

Explicació:

  • numbers és un array.
  • map recorre cada element de l'array i aplica el bloc de codi.
  • El bloc do |number| ... end eleva cada número al quadrat.
  • squared_numbers és un nou array amb els resultats.

select

El mètode select retorna un nou array que conté tots els elements per als quals el bloc de codi retorna true.

Exemple

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

puts even_numbers.inspect

Explicació:

  • numbers és un array.
  • select recorre cada element de l'array i aplica el bloc de codi.
  • El bloc do |number| ... end retorna true si el número és parell.
  • even_numbers és un nou array amb els números parells.

reject

El mètode reject és l'oposat de select. Retorna un nou array que conté tots els elements per als quals el bloc de codi retorna false.

Exemple

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

puts odd_numbers.inspect

Explicació:

  • numbers és un array.
  • reject recorre cada element de l'array i aplica el bloc de codi.
  • El bloc do |number| ... end retorna true si el número és parell.
  • odd_numbers és un nou array amb els números senars.

Exercicis Pràctics

Exercici 1: Utilitzant each

Escriu un programa que recorri un array de noms i imprimeixi cada nom en majúscules.

names = ["alice", "bob", "charlie"]

# Solució
names.each do |name|
  puts name.upcase
end

Exercici 2: Utilitzant map

Escriu un programa que prengui un array de números i retorni un nou array amb cada número multiplicat per 10.

numbers = [1, 2, 3, 4, 5]

# Solució
multiplied_numbers = numbers.map do |number|
  number * 10
end

puts multiplied_numbers.inspect

Exercici 3: Utilitzant select

Escriu un programa que prengui un array de números i retorni un nou array amb només els números majors que 3.

numbers = [1, 2, 3, 4, 5]

# Solució
greater_than_three = numbers.select do |number|
  number > 3
end

puts greater_than_three.inspect

Exercici 4: Utilitzant reject

Escriu un programa que prengui un array de números i retorni un nou array amb tots els números que no són divisibles per 2.

numbers = [1, 2, 3, 4, 5]

# Solució
not_divisible_by_two = numbers.reject do |number|
  number % 2 == 0
end

puts not_divisible_by_two.inspect

Resum

En aquesta secció, hem après sobre els iteradors en Ruby, incloent els mètodes each, map, select i reject. Hem vist com utilitzar aquests mètodes amb arrays i hashes, i hem practicat amb alguns exercicis. Els iteradors són una eina poderosa per treballar amb col·leccions de dades de manera eficient i elegant. En la propera secció, explorarem el mòdul Enumerable i com ens pot ajudar a treballar amb col·leccions de dades en Ruby.

© Copyright 2024. Tots els drets reservats