Найти тему
Golang с 0

Go (Golang) с нуля. Урок 12 - Циклы (Loop)

Оглавление

Циклы — полезная конструкция для выполнения повторяющихся операций. Подробно разберем оператор цикла for по косточкам.

Уроки по Go | Golang с 0 | Дзен

В предыдущем уроке мы разобрались с методами структур. Научились их писать и использовать. Теперь пришло время вернуться к теме циклов.

Раньше мы уже применяли их вместе со срезами и массивами. Вспомните конструкции for range из урока по массивам.

Существует форма цикла for более характерная для популярных языков программирования. Она очень часто встречается в реальных программах на языке Go.

Пример

Наша повседневная жизнь сплошь и рядом наполнена цикличностью в разных формах.

Представим картину. Мы в магазине купили продукты и пришли на кассу самообслуживания. Наша задача переложить продукты из тележки в пакеты. При этом часть продуктов нужно взвесить и отсканировать штрихкод через терминал.

Можно заметить в этом процессе повторяющиеся операции:

1) Достать продукт из тележки

2) Сканировать штрихкод

3) Взвесить если нужно

3) Положить в пакет

Все действия необходимо повторить для каждого товара. Для выполнения подобных циклических наборов действий в программировании применяются циклы (loops).

Не отходя от кассы, разберем циклы подробнее

Цикл

-2

Цикл — это оператор, повторяющий набор команд языка Go, которые определены в его теле (body).

for - ключевое слово, используемое для определения цикла.

Сама конструкция состоит из трех блоков и тела цикла.

Возьмем простой пример задачи, где можно применить цикл.

Посчитать сумму десяти первых чисел, начиная от 1 до 10 включительно.

-3
The Go Play Space

Посмотрим, как такой код мог бы выглядеть на блок-схеме.

-4

Порядок действий будет такой:

1) Определим начальное значение переменной равной 1

2) Будем проверять, когда эта переменная достигнет значение большим 10

3) Если она меньше или равна 10, то продолжаем суммировать эти числа, также увеличивая значение переменной на 1

4) Если значение больше 10, прерываем цикл и выводим результат на экран

Теперь подробно поговорим про каждый этап.

Инициализация

-5

В этом блоке мы можем создать новую переменную цикла.

Часто ее называют счетчиком.

i := 1

Выбираем название для переменной i. Это название часто используется как переменная цикла.

Присваиваем ей начальное значение равное 1.

Блок инициализации необязательный

Инициализация переменной может происходить вне цикла. В этом случае можно сократить описание цикла до следующего вида:

Выносим блок инициализации за конструкцию цикла
Выносим блок инициализации за конструкцию цикла

Желтым цветом выделены строки которые изменились. Мы выносим определение переменной i за цикл на строку номер 8. При этом, отсутствующий блок должен отделяться от других точкой с запятой.

; i <= 10; i++

Если убрать точку с запятой будет ошибка компиляции программы.

Условие

-7

Цикл выполняется до тех пор, пока верно условие.

i <= 10

Пока значение переменной i меньше или равно 10 цикл выполняется.

Важно понимать, что проверка условия будет происходить перед первым запуском цикла.

Таким образом, если в самом начале условие уже не выполняется, то цикл не будет запущен вовсе.

Например, такой код ничего не сделает:

for i := 0; i < 0; i++ {
}

Так как сразу при проверке условия, i будет равно 0, что не меньше чем 0.

Блок условия является необязательным

Можно перенести условие внутрь цикла.

Выносим проверку условия внутрь цикла
Выносим проверку условия внутрь цикла

На выделенных строках отражены изменения. Остановимся на них подробнее.

Мы убрали второй блок. При этом первый блок инициализации продолжает находиться вне цикла, как и раньше. Видим, что оба блока пропали из определения цикла, но при этом разделители продолжают находиться на своем месте.

Далее мы переносим второй блок с условием внутрь цикла на строку 11. Условие должно проверяться теперь с помощью оператора if.

Для того чтобы цикл переходил к следующей итерации, мы используем новое ключевое слово continue. Оно работает так, что цикл сразу переходит на следующую итерацию, минуя любой код, написанный после этого выражения.

Также нужно учесть случай, когда значение i достигает границы, равной 11. Для прерывания цикла используем ключевое слово break. Если Go встречает выражение break, то немедленно прекращает выполнение цикла и переходит к строкам кода после тела цикла.

Изменение

-9

Чтобы цикл продолжал свое выполнение после проверки условия, необходимо сделать изменение переменной цикла, так чтобы мы с каждым шагом продвигались в сторону увеличения значения. В какой-то момент, мы достигнем значения равным 11, что больше 10 и выполнение цикла остановится.

Переход цикла из одного состояния в другое иногда называют итерацией, от английского слова iteration.

i++

Этот блок также является необязательным.

Если убрать все три блока, то мы приходим к форме бесконечного цикла for.

-10

Конечно, бесконечность это хорошо, но не для нашего случая.

Ведь мы хотим получить результат.

В этом примере мы убираем все три блока на 10 строке.

Изменение переменной счетчика помещаем на 13 строку.

Цикл не будет выполняться бесконечно, так как на каждой итерации значение будет увеличиваться на единицу и достигнет значения 11. После этого цикл прекратит свое выполнение.

Тело цикла

В теле цикла мы можем записывать любой код на Go. Если объявляем новые переменные внутри тела цикла, то их область видимости будет ограничена фигурными скобками.

Наконец посмотрим на еще одну форму цикла. В ней можно оставить только одно условие (второй блок). 1 и 3 блоки должны находится вне выражения for.

-11

Блок инициализации находится на строке 8.

Блок проверки условия на строке 10.

Блок изменения на строке 12.

Подведем итоги

Сегодня мы узнали про цикл for и его различные формы записи.

Циклы позволяют решать задачи, в которых требуется последовательное повторение одного блока кода несколько раз.

Поставь лайк, если понравилось, и подпишись на канал, чтобы получать уведомления о новых уроках.

В следующем уроке мы познакомимся с новой структурой данных —

хэш — таблицой (hash table).

Практика

Переходи по ссылке и пройди практику по данному уроку в обучающей онлайн — платформе Stepik.

Циклы

До встречи в новом уроке!