Переход к следующему кругу в Go
Помимо инструкции break, завершающей
работу цикла, существует также инструкция
continue, запускающая новую итерацию
цикла. Данная инструкция иногда может быть
полезна для упрощения кода, хотя практически
всегда задачу можно решить и без нее. Давайте
посмотрим на практическом примере.
Пусть у нас есть числа от 1 до 9.
Давайте переберем их циклом и числа, которые
делятся на 2, возведем в квадрат
и выведем, а числа, которые делятся на 3,
возведем в куб и выведем.
Вот решение описанной задачи:
for i := 1; i <= 9; i++ {
if i%2 == 0 {
res := i * i
fmt.Println(res)
} else if i%3 == 0 {
res := i * i * i
fmt.Println(res)
}
}
Как вы видите, строчка вывода res
повторяется два раза. Давайте вынесем ее
за if, вот так:
for i := 1; i <= 9; i++ {
res := 0
if i%2 == 0 {
res = i * i
} else if i%3 == 0 {
res = i * i * i
}
fmt.Println(res) // вынесли вывод за условие
}
Теперь код, однако, работает немного не так:
вывод переменной res выполнится и для
чисел, которые не прошли через if.
По условию задачи это не нужно.
Поправим проблему, добавив к нашему if
еще условие else, которое будет срабатывать
для чисел, не делящихся на 2 и на 3,
и вызовем там инструкцию continue, которая
сразу же будет перебрасывать нас на новую
итерацию цикла:
for i := 1; i <= 9; i++ {
res := 0
if i%2 == 0 {
res = i * i
} else if i%3 == 0 {
res = i * i * i
} else {
continue // перейдем на новую итерацию цикла
}
fmt.Println(res) // выполнится, если делится на 2 или 3
}
Переход к следующему кругу пропускает остаток
текущего круга. Команда continue не
завершает весь повтор, а сразу идет к шагу
или к следующей проверке, не выполняя команды
ниже в теле.
Ее ставят, когда часть работы на этом значении не нужна, но следующие значения счетчика еще важны. В отличие от выхода, цикл продолжается с новым кругом.
Печатаем числа от 0 до 5 не
включая границу и пропускаем 3:
for i := 0; i < 6; i++ {
if i == 3 {
continue
}
fmt.Println(i) // выведет 0, 1, 2, 4 и 5
}
На круге с i == 3 команда вывода
не выполняется, счетчик все равно получает
шаг и идет дальше.
Даны переменные:
from := 1
to := 8
Обойдите числа от from до to
включительно и не печатайте числа, дающие
остаток 0 при делении на 2.
Дано число:
limit := 10
Переберите счетчик от 0, не включая
limit. Выводите квадрат счетчика,
но пропускайте круги, где он равен 0
или 5.
Объясните разницу между досрочным выходом и переходом к следующему кругу на одном примере со счетчиком.
Напишите цикл, который выведет только
четные числа от 1 до 100,
пропуская нечетные с помощью continue.