L’élégance de Ruby est souvent mise en avant par ses puissantes méthodes d’itération. Deux méthodes particulièrement remarquables, each
et collect
(aussi connue sous le nom de map
), sont fondamentales pour le traitement des collections. Comprendre leurs forces et comment les combiner améliore significativement l’efficacité et la lisibilité du code Ruby.
Table des matières
- Comprendre la méthode
each
- Explorer la méthode
collect
(map
) - Combiner
each
etcollect
- Techniques d’itération avancées
- Conclusion
- FAQ
Comprendre la méthode each
La méthode each
est une pierre angulaire de l’itération en Ruby. Elle itère à travers chaque élément d’un tableau, d’un hash ou de tout autre objet énumérable, exécutant un bloc de code pour chacun. Principalement utilisée pour les effets de bord — actions modifiant quelque chose en dehors de la portée de la méthode each
— elle ne transforme pas intrinsèquement la collection originale.
numbers = [1, 2, 3, 4, 5]
numbers.each do |number|
puts number * 2 # Affiche chaque nombre multiplié par 2
end
# Sortie :
# 2
# 4
# 6
# 8
# 10
Ici, each
itère, et le bloc affiche chaque nombre doublé. Le tableau numbers
reste inchangé.
Explorer la méthode collect
(map
)
Contrairement à each
, collect
(ou map
— ce sont des alias) transforme la collection, renvoyant un nouveau tableau contenant les résultats de l’application d’un bloc à chaque élément. C’est parfait pour créer des ensembles de données modifiés.
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.collect do |number|
number * number # Carré chaque nombre
end
puts squared_numbers # Affiche [1, 4, 9, 16, 25]
puts numbers # Affiche [1, 2, 3, 4, 5] - tableau original inchangé
collect
crée squared_numbers
; le tableau numbers
original est intact.
Combiner each
et collect
La puissance de each
et collect
brille vraiment lorsqu’elles sont utilisées ensemble. Vous pouvez exploiter each
pour les effets de bord tandis que collect
transforme les données.
numbers = [1, 2, 3, 4, 5]
squared_numbers = numbers.collect do |number|
puts "Traitement : #{number}" # Effet de bord
number * number
end
puts squared_numbers # Affiche [1, 4, 9, 16, 25]
Ceci combine la transformation et la journalisation dans le bloc collect
.
Techniques d’itération avancées
Au-delà de l’utilisation de base, explorez des méthodes comme inject
/reduce
pour des agrégations et des transformations plus complexes. Celles-ci offrent des approches alternatives pour traiter les collections, offrant une flexibilité au-delà des opérations élément par élément.
Conclusion
each
et collect
sont essentielles pour tout développeur Ruby. Comprendre leurs utilisations, individuellement et combinées, améliore significativement la clarté, l’efficacité et la maintenabilité du code. Le choix dépend de si vous avez besoin de modifier la collection originale ou simplement d’effectuer des actions sur chaque élément.
FAQ
- Q : Quelle est la différence entre
collect
etmap
? R : Ce sont des alias ; fonctionnellement identiques.map
est souvent préféré pour la lisibilité. - Q :
each
peut-il renvoyer une valeur ? R :each
renvoie toujours la collection originale. Son but est les effets de bord. - Q : Puis-je utiliser
each
avec des hashes ? R : Oui.my_hash.each { |key, value| puts "#{key}: #{value}" }
- Q : Y a-t-il des alternatives à
collect
? R : Oui,inject
/reduce
, maiscollect
/map
reste la plus simple pour les transformations élément par élément.