Menu
Coddy logo textTech

Encadeando o Map

Parte da seção Lógica e Fluxo do Journey de Ruby da Coddy — lição 22 de 56.

Você conheceu o map nos fundamentos; ele constrói um novo array transformando cada elemento. Seu real poder aparece quando você o encadeia com select, reject e companhia.

Cada método retorna um array, então chamar outro método no resultado apenas continua o processo:

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

Leia a sequência de cima para baixo: comece com números, mantenha os ímpares, multiplique cada um por 10. Sem variáveis temporárias, sem loop.

O atalho &:method_name funciona sempre que o bloco apenas chama um método:

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

Essa abreviação está em toda parte no código Ruby. Reconheça-a quando a vir.

challenge icon

Desafio

Fácil

Leia uma lista de palavras separadas por vírgula. Imprima em uma única linha as palavras com mais de 3 caracteres, em letras maiúsculas, unidas por , .

Construa isso como uma única cadeia: select as longas, map elas com &:upcase, então join.

Para a entrada hi,hello,yo,coddy,sup, a saída é:

HELLO, CODDY

Folha de consulta

Encadeie métodos de array — cada um retorna um novo array, então você pode continuar chamando métodos no resultado:

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

Use &:method_name como um atalho quando um bloco apenas chama um método:

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

Experimente você mesmo

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

# TODO: encadear select + map(&:upcase) + join
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo