web-dev-qa-db-fra.com

break and return en Ruby, comment les utilisez-vous?

Je viens de poser une question sur le retour et il semble faire la même chose que pause. Comment utilisez-vous return et comment utilisez-vous break, par exemple dans le code que vous écrivez pour résoudre les problèmes pouvant utiliser ces constructions.

Je ne peux pas vraiment poster d'exemples parce que je ne sais pas comment les utiliser, ils n'auraient donc aucun sens.

24
thenengah

Retourne les sorties de la fonction entière. 

Break sort de la boucle la plus interne.

Ainsi, dans une fonction comme celle-ci:

def testing(target, method)
  (0..100).each do |x|
    (0..100).each do |y|
     puts x*y
     if x*y == target
       break if method == "break"
       return if method == "return"
     end
    end 
  end
end

Pour voir la différence, essayez:

testing(50, "break")
testing(50, "return")
68
stef

break est appelé depuis une boucle. Cela vous mettra juste après la boucle la plus profonde dans laquelle vous vous trouvez.

return est appelé depuis les méthodes. Il retournera la valeur à laquelle vous le dites et vous placera juste après l'endroit où il a été appelé.

4
Null Set

Je voulais modifier la réponse approuvée pour simplifier l'exemple, mais ma modification a été rejetée avec la suggestion de créer une nouvelle réponse. Voici donc ma version simplifiée:

def testing(target, method)
  (1..3).each do |x|
    (1..3).each do |y|
     print x*y
     if x*y == target
       break if method == "break"
       return if method == "return"
     end
    end 
  end
end

nous pouvons voir la différence en essayant:

testing(3, "break")
testing(3, "return")

Résultats de la première (instruction break sortant de la boucle la plus à l'intérieur uniquement lorsque 3 est atteint):

1232463

Résultats de la dernière (instruction return sortant de la fonction entière):

123
1
Karol Selak

Un autre exemple pourrait être si vous avez deux boucles dans une seule méthode et si vous voulez sortir de la première boucle et continuer jusqu'à la deuxième boucle, utilisez break dans la première boucle ou inversement:

def testing(method)
x=1
  10.times do
    if(x == 2)
     break if method == "break"
    end
   x+=1
  end
  10.times do
   if(x == 5)
     return if method == "return"
   end
  x+=1
  end 
end
0
srikanth