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 полностью завершает цикл. Правильное использование этих конструкций делает код более читаемым и эффективным.