Passer des arguments aux méthodes d’échappement d’itération courantes pour un meilleur contrôle dans les énumérables.
Ruby fournit deux moyens d’échapper à un énumérable : next
entrera dans l’itération suivante sans autre évaluation, et break
sortira entièrement de l’énumérable.
Jetons un coup d’œil aux deux avec quelques exemples simples.
# Example of `next`a = a.each do |num|
next if num < 2
puts num
end# console output
2
3
=>
Dans l’exemple ci-dessus, nous voyons que 1
n’est pas imprimé sur la console, car l’appel à next
se déclenche à la première itération (1 est inférieur à 2), ignorant le puts
. La condition n’est pas remplie dans les deux itérations suivantes et l’instruction puts
envoie num
à la console, comme prévu, suivie d’un retour de a
.
# Example of `break`a = a.each do |num|
break if num < 2
puts num
end# console output
=> nil
Avec break
quelque chose de complètement différent s’est produit. Ici, lors de la première itération, 1 est à nouveau évalué comme étant inférieur à 2, et donc notre appel à break
est exécuté, laissant l’énumérable entièrement. Dans ce cas, nous voyons que les itérations futures n’ont pas lieu et nil
est renvoyé.
Bien que cette évasion soit souhaitable, que se passe-t-il si nous devions retourner autre chose que nil
? Heureusement, break
et next
acceptent tous deux un argument pour définir manuellement une valeur de retour.
Passer des arguments
Tout d’abord, regardons comment cela fonctionne avec break
:
a = a.each do |num|
break num if num < 2
puts num
end# console output
=> 1
Ici, nous avons passé num
comme argument à break
(rappelez-vous que les parenthèses sont facultatives dans Ruby, donc break num
et break(num)
sont évaluées de manière identique) et spécifient manuellement la valeur de retour. Si jamais vous devez retourner autre chose que nil
lorsque break
est déclenché, cela peut être exceptionnellement utile.