Ruby desde Cero

Bloques e iteradores

Una de las fortalezas particulares de Ruby son los Bloques y los iteradores. Juntos son unas de las herramientas mas utilizadas dentro del desarrollo con Ruby, tanto que los iteradores en general son los encargados de sustituir a los métodos para hacer ciclos (for, until, while, etc).

Bloques

Los bloques no son más, que pedazos de código que pueden ser guardados y ejecutados por otra función. Los bloques de código pueden ser utilizados para implementar callbacks, pasar código como parámetro de una función y implementar los iteradores.

Existen dos maneras de definir un bloque en Ruby

# Para bloques de una linea
{ puts "Esto es un bloque" }

# Para bloques multilinea
do
  suscripcion = curso.suscribir(alumno)
  alumno.socializar
  enviar_correo_de_notificacion(suscripcion)
end

Existen varias maneras de ejecutar un bloque cuando es pasado como una función, la manera más común de realizarlo es usando el método 'yield', el cual es un método que ejecuta el contenido del bloque.

# Sin parámetros
def ejecutar_bloque
  puts "Comienza la ejecución del bloque"
  yield
  puts "Termina la ejecución del bloque"
end

ejecutar_bloque { puts "este es el contenido del bloque" }

# Con parámetros globales de la función
def ejecutar_bloque_con_params_global(name, age)
  puts "Comienza la ejecución del método con paramatros"
  puts "El nombre es #{name}, y esta la edad #{age}"
  yield
  puts "Termina la ejecución del bloque"
end

ejecutar_bloque_con_params_global('Sergio', 29) { puts "este es el contenido del bloque" }

# Con parámetros que se van a usar dentro del bloque.
def ejecutar_bloque_con_params(name, age)
  puts "Comienza la ejecución del método con paramatros"
  yield(name, age)
  puts "Termina la ejecución del bloque"
end

ejecutar_bloque_con_params('Sergio', 29) do |nombre, edad|
  puts "El nombre que pasaron es: #{nombre}"
  puts "La edad es: #{edad}"
end

Iteradores

Los iteradores son la manera en la que podemos realizar ciclos o iteraciones en la cual se ejecuta un bloque.

Uno de los iteradores de uso común es el .each sobre un array o hash

arreglo = %w(Sergio Oriana Jose Ciriaco Gustavo Erick Blanca)
arreglo.each do |nombre|
  puts "El nombre del usuario es: #{nombre}"
end