for vs each en Ruby

Stewart Nguyen 30 enero 2023
  1. Array#each en Ruby
  2. El bucle for..in en Ruby
for vs each en Ruby

En Ruby, puede iterar a través de un array utilizando tanto Array#each como for..in. Sin embargo, hay una diferencia significativa entre los dos.

Array#each en Ruby

El método Ruby Array#each es el método más sencillo y ampliamente utilizado para iterar elementos individuales en un array.

each es un método incorporado de la clase Array, y es la forma más popular de iterar sobre los elementos de un array en Ruby.

each toma un bloque como parámetro y devuelve el elemento actual.

[1, 2, 3].each { |n| puts n }

Producción :

1
2
3

El bucle for..in en Ruby

Como la mayoría de los otros lenguajes de programación, Ruby tiene una instrucción for para recorrer un array.

for va seguido de una variable como el elemento actual y un array iterada.

for n in [1, 2, 3]
  puts n
end

Producción :

1
2
3

Bajo el capó, Array#each y for..in casi hacen lo mismo. Sin embargo, hay una diferencia menor, que podría causar un problema grave.

[1, 2, 3].each { |n| n }
puts n

Producción :

NameError (undefined local variable or method `n' for main:Object)

Ejemplo de código:

for n in [1, 2, 3]
 n
end
puts n

Producción :

3

Obtenemos un error si tratamos de imprimir n después de Array#each, pero imprime 3 después del bucle for.

¿Que esta pasando?

Antes de ejecutar for..in, la variable n se define de antemano. Una vez que se completa el bloque, permanece visible fuera del bloque.

En otras palabras, el bucle for es similar a:

n = nil
[1, 2, 3].each { |i| n = i }
puts n

Producción :

3

En el caso de Array#each, la variable n se define dentro del bloque { |n| puts n }, por lo tanto, no es visible para nada fuera del alcance del bloque.

El uso de un bucle for puede causar un problema frustrante al introducir una variable adicional como efecto secundario. Como resultado, se prefiere Array#each a for..in.