¿Qué es un bloque?
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 15 de 56.
Ya has estado escribiendo bloques. Cada vez que escribiste each do |x| ... end, la parte entre do y end era un bloque: un fragmento de código pasado a un método.
[1, 2, 3].each do |n|
puts n * 2
endAquí, each es un método del array, y do |n| ... end es el bloque. each ejecuta el bloque una vez por cada elemento, pasándolo como n.
Los bloques no son objetos separados que se guardan en variables, están vinculados directamente a la llamada del método. Un método recibe un bloque o no lo recibe, y la mayoría de los métodos de iteración (each, map, select, times) están diseñados para recibir uno.
3.times do |i|
puts "hi #{i}"
endLlamar a un método sin su bloque cambia lo que hace. [1,2,3].map sin bloque devuelve un enumerador en lugar de un array transformado, por lo que el bloque es parte de lo que el método significa.
Desafío
PrincipianteLee un entero n de la entrada. Usa el método times con un bloque para imprimir el mensaje Iteration <i> para cada valor de i desde 0 hasta n - 1.
Para la entrada 3, la salida es:
Iteration 0
Iteration 1
Iteration 2Hoja de referencia
Un bloque es un fragmento de código pasado a un método entre do |param| ... end:
[1, 2, 3].each do |n|
puts n * 2
endUsa times para repetir un bloque n veces, con i yendo de 0 a n - 1:
3.times do |i|
puts "hi #{i}"
endPruébalo tú mismo
n = gets.to_i
# TODO: usa n.times con un bloque para imprimir cada iteración
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