Ruby maalesef biraz farklı. Not: Hafızam bu konuda biraz puslu, bu yüzden yanılıyorsam özür dilerim
break / devam yerine, döngülerde aynı şekilde davranan break / next komutuna sahiptir.
Döngüler (diğer her şey gibi) ifadelerdir ve yaptıkları son şeyi "geri döndürürler". Çoğu zaman, dönüş değerini bir döngüden almak anlamsızdır, bu yüzden herkes bunu yapar
a = 5
while a < 10
a + 1
end
Ancak bunu yapabilirsiniz
a = 5
b = while a < 10
a + 1
end # b is now 10
ANCAK, birçok yakut kodu bir blok kullanarak bir döngüyü 'öykünür'. Kanonik örnek
10.times do |x|
puts x
end
İnsanların bir blok sonucu bir şeyler yapmak istemeleri daha yaygın olduğu için, burası dağınık hale gelir. break / next, bir blok bağlamında farklı şeyler ifade eder.
break, blok adı verilen koddan atlar
daha sonra bloktaki kodun geri kalanını atlar ve belirttiğinizi blok arayanına 'döndürür'. Bu örnekler olmadan bir anlam ifade etmiyor.
def timesten
10.times{ |t| puts yield t }
end
timesten do |x|
x * 2
end
# will print
2
4
6
8 ... and so on
timesten do |x|
break
x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped
timesten do |x|
break 5
x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5
timesten do |x|
next 5
x * 2
end
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.
Yani evet. Ruby harika, ama bazı korkunç köşe vakaları var. Bu benim kullanma yıllarında gördüğüm en kötü ikinci :-)