Menu
Coddy logo textTech

Encadenando Map

Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 22 de 56.

Conociste map en los fundamentos, construye un nuevo array transformando cada elemento. Su verdadero potencial aparece cuando lo encadenas con select, reject y compañía.

Cada método devuelve un array, por lo que llamar a otro método sobre el resultado simplemente continúa la cadena:

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

Lea la cadena de arriba a abajo: comience con números, mantenga los impares, multiplique cada uno por 10. Sin variables temporales, sin bucles.

El atajo &:method_name funciona siempre que el bloque solo llame a un método:

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

Esta abreviatura está en todas partes en el código Ruby. Reconócela cuando la veas.

challenge icon

Desafío

Fácil

Lee una lista de palabras separadas por comas. Imprime en una sola línea las palabras de más de 3 caracteres, en mayúsculas, unidas con , .

Constrúyelo como una sola cadena: select las largas, map con &:upcase, luego join.

Para la entrada hi,hello,yo,coddy,sup, la salida es:

HELLO, CODDY

Hoja de referencia

Encadena métodos de array — cada uno devuelve un nuevo array, por lo que puedes seguir llamando a métodos sobre el resultado:

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

Usa &:method_name como un atajo cuando un bloque solo llama a un método:

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

Pruébalo tú mismo

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

# POR HACER: encadenar select + map(&:upcase) + join
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo