For et Each en Ruby
En Ruby, vous pouvez parcourir un tableau en utilisant à la fois Array#each
et for..in
. Cependant, il existe une différence significative entre les deux.
Array#each
en Ruby
La méthode Ruby Array#each
est la méthode la plus simple et la plus largement utilisée pour itérer des éléments individuels dans un tableau.
each
est une méthode intégrée de la classe Array, et c’est le moyen le plus populaire d’itérer sur les éléments du tableau Ruby.
each
prend un bloc comme paramètre et renvoie l’élément courant.
[1, 2, 3].each { |n| puts n }
Production :
1
2
3
La boucle for..in
en Ruby
Comme la plupart des autres langages de programmation, Ruby a une instruction for
pour parcourir un tableau.
for
est suivi d’une variable comme élément courant et d’un tableau itéré.
for n in [1, 2, 3]
puts n
end
Production :
1
2
3
Sous le capot, Array#each
et for..in
font presque la même chose. Cependant, il existe une différence mineure, qui pourrait causer un problème grave.
[1, 2, 3].each { |n| n }
puts n
Production :
NameError (undefined local variable or method `n' for main:Object)
Exemple de code :
for n in [1, 2, 3]
n
end
puts n
Production :
3
Nous obtenons une erreur si nous essayons d’imprimer n
après Array#each
, mais il imprime 3
après la boucle for
.
Que se passe-t-il?
Avant l’exécution de for..in
, la variable n
est définie à l’avance. Une fois le bloc terminé, il reste visible à l’extérieur du bloc.
En d’autres termes, la boucle for
est similaire à :
n = nil
[1, 2, 3].each { |i| n = i }
puts n
Production :
3
Dans le cas de Array#each
, la variable n
est définie dans le bloc { |n| puts n }
, par conséquent, il n’est visible pour rien en dehors de la portée du bloc.
L’utilisation d’une boucle for
peut causer un problème frustrant en introduisant une variable supplémentaire comme effet secondaire. Par conséquent, Array#each est préféré à for..in
.