цикл for в golang

После прочтения данного урока вы сможете:

  • Заставить компьютер сделать выбор с помощью if и switch;
  • Повторить код с помощью цикла for;
  • Использовать условия для цикла и перехода.

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

Форум Гоферов

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

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

Содержание статьи

Если вы уже знакомы с ключевыми словами if, else и for, что используются во многих других языках программирования, вы сможете быстрее вникнуть в синтаксис Go.

Представьте следующую ситуацию. Чтобы скоротать время во время длительной поездки, члены некой семьи решают сыграть в «Двадцать Вопросов». Один человек должен что-то задумать, а остальным требуется отгадать, что именно. Ведущий может отвечать только «да» или «нет». Вопросы вроде «Насколько он большой?» задавать нельзя. Вместо этого можно спросить «Этот предмет больше тостера?»

Компьютерная программа оперирует по принципу вопросов, ответами на которые может быть «да» или «нет». При наличии условия (к примеру, больше тостера), процессор может продолжить работу или переключиться на другой путь развития событий. Комплексные решения требуется разбивать на более мелкие, простые условия.

Подумайте об одежде, в которую вы сегодня одеты. Как был выбран каждый предмет? Какие переменные рассматривались во время выбора? Погода, планы на день, доступность, мода или что-то другое? Как бы вы научили компьютер одеваться? Для практики можете составить несколько вопросов, вариантами ответа на которые могут быть только «да» или «нет».

True или False — логический тип данных в Go

В настольных играх всегда нужно делать определенный выбор. К примеру, игроку выпадает карта с текстом вроде: «Если хотите выйти из пещеры, перейдите на страницу 21 инструкции для дальнейших указаний». Вы хотите выйти из пещеры? В Go ответом может быть true или false, две константы, которые уже объявлены. Их можно использовать следующим образом:

В некоторых языках программирования понятие истины несколько расплывчато. В Python и JavaScript отсутствие текста ("") считается ложью (false), как и число ноль. В Ruby и Elixir одинаковые значения считаются истиной. В Go единственным истинным значением является true, а единственным ложным — false.

true и false являются булевыми значениями, названными в честь математика Джорджа Буля, жившего в 19 веке. Несколько функций стандартной библиотеки булево, или логическое значение. К примеру, в следующей программе используется функция Contains из пакета strings. С ее помощью код проверяет, содержит ли переменная command текст «наружу». Если в тексте действительно есть это слово, результатом будет true.

Вопросы для проверки:

  1. Представьте, что на выходе из темной пещеры яркие лучи полуденного солнца заставляют вас зажмуриться. Как бы вы объявили булеву переменную под названием wearShades? На английском слово «shades» может использоваться в значении «солнечные очки».
  2. Возле входа в пещеру находится знак. Как можно проверить, содержит ли переменная command слово «прочитать»?

Операторы сравнения в Golang

Добиться значений true или false можно через сравнение двух значений. Операторы сравнения в Go представлены в следующей таблице:

Оператор сравнения Назначение
== Равно
< Менее чем
<= Менее чем или равно
!= Не равно
> Более чем
>= Более чем или равно

Операторы сравнения используются как с числами, так и с текстом. Это показано в следующем примере:

Результат вывода:

На заметку: В JavaScript и PHP есть специальные тройные операторы для строгого равенства. В этих языках «1» == 1 истинно (неточно), но «1» === 1 ложно (строго). В Go только один оператор равенства, через который нельзя сравнивать текст и число. Тем не менее, можно конвертировать число в текст и наоборот.

Вопрос для проверки:

Что больше — «яблоко» или «банан»?

Условный оператор if-else в Golang

Компьютер может использовать булевы значения или сравнения для выбора между двумя различными вариантами через оператор if, как показано в следующей программе:

Результат вывода:

else if и else являются опциональными. Когда рассматривается несколько вариантов, можно повторять else if столько раз, сколько требуется.

На заметку: Если Go выдает ошибку об использовании знака присваивания (=), значит, в данном случае требуется знак равенства (==).

Вопрос для проверки:

В рассматриваемой приключенческой игре есть несколько локаций. Напишите программу, которая использует if и else if для отображения описания каждой из трех локаций: пещеры, входа и горы. При написании программы следите, чтобы фигурные скобки {} стояли в соответствии с правилами единственного правильного скобочного стиля.

Логические операторы || и && в Golang

В Go логический оператор || значит или (OR), а && значит и (AND). Попробуйте использовать логические операторы для проверки нескольких условий за один раз. Внизу даны таблицы, что показывают, как данные операторы работают.

Истинно, если хотя бы один элемент является истиной — a || b (или):

true false go

Истинно, если оба элемента истинны — a && b (и):

true false golang

Напишем код, что должен определить, будет ли 2100 год високосным. Правила определения високосного года таковы:

  • Любой год, что делится без остатка на четыре, но не делится без остатка на 100;
  • Или любой год, что делится без остатка на 400.

Напомним, что для получения остатка деления двух чисел используется оператор %. Ноль в результате является показателем того, что первое число делится без остатка на второе.

Результат вывода программы:

Как и большая часть языков программирования, Go использует логику короткого замыкания. Если первое условие истинно (год делится на 400 без остатка), тогда нет нужды проверять условие, что следует за оператором ||, поэтому оно будет игнорироваться.

Оператор && действует прямо противоположно. Если оба условия не выполняются, тогда результат будет ложен. Если рассматриваемый год не делится без остатка на 4, тогда нет нужды проверять следующее условие.

Не логический оператор ! конвертирует булево значение с false к true или наоборот. Если у игрока нет факела, или если факел не горит, следующий код выведет сообщение.

Вопросы для проверки: 

  1. Взяв за основу рассмотренные в уроке примеры, выясните, был ли 2000 год високосным. Используйте простую ручку, бумагу и в случае необходимости калькулятор. Найдите все остатки, какие операторы для этого используются? После этого приведите условия == и != к true или false. Под конец задействуйте логические операторы && и ||. Каков результат, был ли 2000 год високосным?
  2. Помогло бы использование логики короткого замыкания сэкономить время при определения истинности выражения 2000%400 == 0?

Оператор switch в Golang

Для сравнения одного значения с несколькими другими Go использует оператор switch. Пример его использования показан далее:

Результат выполнения программы:

Оператор switch работает и с числами. Оператор switch также используется с условиями для каждого конкретного случая наподобие if_else. Особенностью switch является ключевое слово fallthrough, что нужно для выполнения тела следующего case. Это показано в следующем коде:

Результат выполнения программы:

Цикл for в Golang

Вместо многочисленного набора одного и того же кода можно использовать ключевое слово for, что повторяет нужный код за вас. В следующей программе цикл for работает до тех пор, пока count не станет равен 0.

Перед каждой итерацией выражение count > 0 получает булево значение. Если это false (count = 0), цикл прекращается. В противном случае запускается тело цикла (код между { и }).

В бесконечном цикле условие for не уточняется, но цикл все еще можно прервать в любое время через break. В следующем коде какой-то объект движется по окружности 360 градусов и останавливается в случайной точке.

Обратите внимание, что у цикла for есть и другие, более сложные формы. В будущем вы обязательно столкнетесь с ними.

Вопрос для проверки:

Не каждый запуск проходит по плану. Реализуйте обратный отсчет, где на каждую секунду приходится шанс 1 к 100, что ввиду определенных обстоятельств запуск прервется, и счетчик остановится.

Заключение

  • При указании условия могут использоваться только булевы значения;
  • В Go для условий и повторений используются if, switch и for;
  • На данный момент мы рассмотрели 12 из 25 ключевых слов Go: package, import, func, var, if, else, switch, case, default, fallthrough, for и break.

Для проверки собственных сил выполните следующее задание.

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