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خروج از متدکل متد

خلاصه

این مبحث بخشی از دوره آموزش کامل روبی است.

ابزارهای مرتبط