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 9Prué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 PipelinePractica por tu cuenta: Compilador de Ruby online