break، next و redo در روبی
کنترل جریان حلقه: break، next، redo، retry و return در روبی
کنترل جریان حلقه
روبی چندین کلمه کلیدی برای کنترل جریان داخل حلقه دارد.
۱. break — خروج از حلقه
break حلقه را کاملاً متوقف میکند:
5.times do |i|
break if i == 3
puts "i = #{i}"
end
# خروجی: 0, 1, 2 (در i=3 متوقف میشود)
break با مقدار
در روبی، break میتواند یک مقدار برگرداند:
result = [1, 2, 3, 4, 5].each do |n|
break n if n.even?
end
puts result # => 2 (اولین عدد زوج)
۲. next — پرش به تکرار بعدی
next تکرار فعلی را رها کرده و به تکرار بعدی میرود:
5.times do |i|
next if i.even?
puts "فرد: #{i}"
end
# خروجی: 1, 3 (اعداد زوج رد میشوند)
۳. redo — تکرار دوباره همان دور
redo همان تکرار فعلی را دوباره اجرا میکند (بدون افزایش شمارنده):
3.times do |i|
puts "شروع: #{i}"
redo if i == 1 && !defined?(repeated)
repeated = true
puts "پایان: #{i}"
end
redo میتواند باعث حلقه بینهایت شود! با احتیاط استفاده کنید.۴. retry — شروع مجدد کل حلقه
retry کل حلقه را از ابتدا شروع میکند:
# معمولاً با rescue استفاده میشود
retries = 0
begin
puts "تلاش #{retries + 1}"
raise "خطا!" if retries < 2
rescue
retries += 1
retry if retries < 3
end
۵. return — خروج از متد
return از کل متد خارج میشود:
def find_first_even(numbers)
numbers.each do |n|
return n if n.even?
end
nil
end
puts find_first_even([1, 3, 4, 5, 6]) # => 4
مثالهای کاربردی
یافتن اولین مورد
# بدون break
found = nil
[1, 3, 5, 4, 2].each do |n|
if n.even?
found = n
break
end
end
puts found # => 4
# یا با find
found = [1, 3, 5, 4, 2].find(&:even?)
puts found # => 4
رد کردن موارد خاص
# چاپ فقط اعداد مثبت
[-3, 5, -1, 8, 2, -4].each do |n|
next if n < 0
puts n
end
# خروجی: 5, 8, 2
خروج از حلقه تو در تو
caught = false
(1..3).each do |i|
(1..3).each do |j|
if i * j > 4
puts "#{i} × #{j} > 4"
caught = true
break
end
end
break if caught
end
تفاوت break، next و return
| کلمه کلیدی | تأثیر | محدوده |
|---|---|---|
break | خروج از حلقه | حلقه فعلی |
next | پرش به دور بعدی | تکرار فعلی |
redo | تکرار همان دور | تکرار فعلی |
retry | شروع مجدد کل حلقه | کل حلقه |
return | خروج از متد | کل متد |
خلاصه
break— حلقه را متوقف میکندnext— به دور بعدی میرود (مثل continue در سایر زبانها)redo— همان دور را دوباره اجرا میکندretry— کل حلقه را از ابتدا شروع میکندreturn— از متد خارج میشود
این مبحث بخشی از دوره آموزش کامل روبی است.