For et Each en Ruby

Stewart Nguyen 30 janvier 2023
  1. Array#each en Ruby
  2. La boucle for..in en Ruby
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.