next
и break
— это ключевые слова для управления потоком выполнения циклов, но они работают принципиально по-разному:
next
— переходит к следующей итерации текущего циклаbreak
— полностью завершает выполнение текущего циклаnext
пропускает оставшуюся часть текущей итерации и переходит к следующей:
(1..5).each do |i|
next if i.even? # Пропустить чётные числа
puts i
end
# Выведет: 1, 3, 5
Особенности next
:
break
немедленно прекращает выполнение всего цикла:
(1..5).each do |i|
break if i > 3 # Выйти при i > 3
puts i
end
# Выведет: 1, 2, 3
Особенности break
:
Характеристика | next | break |
---|---|---|
Действие | Пропуск текущей итерации | Выход из цикла |
Выполнение цикла | Продолжается | Прекращается |
Возвращаемое значение | Может задать значение для текущей итерации | Может вернуть значение из цикла |
Типичное применение | Пропуск элементов по условию | Досрочное завершение при выполнении условия |
(1..10).each do |i|
next if i % 2 == 0 # Пропустить чётные
break if i > 7 # Выйти после 7
puts i
end
# Выведет: 1, 3, 5, 7
result = (1..10).each do |i|
break i * 2 if i == 5
end
puts result # => 10
break
выходит только из текущего циклаmap
, select
и др.break
внутри rescue
ведёт себя иначеПример с вложенными циклами:
(1..3).each do |i|
(1..3).each do |j|
break if j == 2 # Выйдет только из внутреннего цикла
puts "#{i}, #{j}"
end
end
# Выведет: 1,1 2,1 3,1
next
для фильтрации элементов в циклеbreak
для досрочного выхода при выполнении условияnext
и break
Резюмируем: next
и break
— важные инструменты управления циклами в Ruby. Ключевое отличие: next
переходит к следующей итерации, а break
полностью завершает цикл. Правильное использование этих конструкций делает код более читаемым и эффективным.