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}"
endLas 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]Desafío
FácilLee una lista de enteros separados por comas desde la entrada. Imprime dos líneas:
- Cada número duplicado, unido con
,. Usa la forma de llaves demap. - La cadena
"<n> squared is <n*n>"para cada número, una por línea. Usa la formado...enddeeach.
Para la entrada 1,2,3, la salida es:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Hoja 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}"
endAmbas 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
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
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline