Menu
Coddy logo textTech

do..end vs llaves

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

Ruby te ofrece dos formas de escribir un bloque. Significan lo mismo, pero cada una tiene un caso de uso preferido.

do...end es para bloques multilínea:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Las llaves { ... } son para bloques de una sola línea, cortos, con forma de expresión:

[1, 2, 3].each { |n| puts n * 2 }

Los dos tienen una precedencia ligeramente diferente, pero la regla que los estudiantes necesitan es la de estilo: llaves para una sola línea, do...end para múltiples líneas.

Ambas formas pueden devolver un valor. La última expresión del bloque es lo que se devuelve a métodos como map:

[1, 2, 3].map { |n| n * 10 }    # [10, 20, 30]
[1, 2, 3].map do |n|
  n * 10
end                              # [10, 20, 30]
challenge icon

Desafío

Fácil

Lee una lista de enteros separados por comas desde la entrada. Imprime dos líneas:

  1. Cada número duplicado, unido con , . Usa la forma de llaves de map.
  2. La cadena "<n> squared is <n*n>" para cada número, una por línea. Usa la forma do...end de each.

Para la entrada 1,2,3, la salida es:

2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9

Hoja de referencia

Los bloques de Ruby tienen dos sintaxis:

Llaves { ... } para bloques de una sola línea:

[1, 2, 3].map { |n| n * 2 }  # [2, 4, 6]

do...end para bloques multilínea:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

Ambas formas devuelven la última expresión del bloque (utilizada por métodos como map).

Pruébalo tú mismo

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: línea 1, duplicada, forma de llave de map, unida con ", "
# TODO: líneas 2..n, cuadrados, forma do...end de each
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