Menu
Coddy logo textTech

Chaîner Map

Fait partie de la section Logique et Flux du Journey Ruby de Coddy — leçon 22 sur 56.

Vous avez découvert map dans les bases, il construit un nouveau tableau en transformant chaque élément. Sa véritable puissance se révèle lorsque vous le chaînez avec select, reject et consorts.

Chaque méthode retourne un tableau, donc l'appel d'une autre méthode sur le résultat se poursuit simplement :

numbers = [1, 2, 3, 4, 5]
result = numbers
  .select { |n| n.odd? }
  .map    { |n| n * 10 }
puts result.inspect   # [10, 30, 50]

Lisez la chaîne de haut en bas : commencez par les nombres, gardez les nombres impairs, multipliez chacun par 10. Pas de variables temporaires, pas de boucle.

Le raccourci &:method_name fonctionne chaque fois que le bloc appelle simplement une seule méthode :

["hi", "yo"].map { |s| s.upcase }   # ["HI", "YO"]
["hi", "yo"].map(&:upcase)         # ["HI", "YO"]  (identique)

Ce raccourci est partout dans le code Ruby. Sachez le reconnaître quand vous le voyez.

challenge icon

Défi

Facile

Lisez une liste de mots séparés par des virgules. Affichez sur une seule ligne les mots de plus de 3 caractères, en majuscules, joints par , .

Construisez cela sous forme d'une seule chaîne : utilisez select pour les mots longs, map avec &:upcase, puis join.

Pour l'entrée hi,hello,yo,coddy,sup, la sortie est :

HELLO, CODDY

Aide-mémoire

Enchaînez les méthodes de tableau — chacune renvoie un nouveau tableau, vous pouvez donc continuer à appeler des méthodes sur le résultat :

numbers = [1, 2, 3, 4, 5]
result = numbers
  .select { |n| n.odd? }
  .map    { |n| n * 10 }
# [10, 30, 50]

Utilisez &:method_name comme raccourci lorsqu'un bloc appelle simplement une seule méthode :

["hi", "yo"].map(&:upcase)   # ["HI", "YO"]

Essayez vous-même

words = gets.chomp.split(",")

# À FAIRE : enchaîner select + map(&:upcase) + join
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et Flux