Pasando argumentos a métodos de escape de iteración comunes para un mejor control en enumerables.
Ruby proporciona dos medios para escapar de un enumerable: next
entrará en la siguiente iteración sin evaluación adicional, y break
saldrá del enumerable por completo.
Echemos un vistazo rápido a ambos con algunos ejemplos simples.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
En el ejemplo anterior vemos que el 1
no se imprime en la consola, porque la llamada next
activa en la primera iteración (1 es menor que 2), omitiendo el puts
declaración. El condicional no se cumple en las dos iteraciones siguientes y la instrucción puts
envía num
a la consola, como se esperaba, seguida de un retorno de a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
Con break
ha sucedido algo completamente diferente. Aquí, en la primera iteración, 1 de nuevo se evalúa como menor que 2, por lo que se ejecuta nuestra llamada a break
, dejando el enumerable por completo. En este caso, vemos que las iteraciones futuras no tienen lugar y se devuelve nil
.
Si bien este escape es deseable, ¿y si necesitáramos devolver algo que no sea nil
? Afortunadamente, tanto break
como next
aceptan un argumento para establecer manualmente un valor de retorno.
Pasando argumentos
Primero, veamos cómo funciona con break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Aquí hemos pasado num
como argumento para break
(recuerde que los paréntesis son opcionales en Ruby, por lo que break num
y break(num)
se evalúan de forma idéntica) y se especifica manualmente el valor devuelto. Si alguna vez necesita devolver algo que no sea nil
cuando se activa break
, esto puede ser excepcionalmente útil.