Ruby Programming

Maîtriser la puissance de l’itération en Ruby : `each` et `collect`

Spread the love

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

  1. Comprendre la méthode each
  2. Explorer la méthode collect (map)
  3. Combiner each et collect
  4. Techniques d’itération avancées
  5. Conclusion
  6. 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 et map ? 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, mais collect/map reste la plus simple pour les transformations élément par élément.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *