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

Для петель

В большинстве языков программирования цикл for используется, когда вы хотите выполнить некоторую задачу определенное количество раз. Как я продемонстрировал в своей последней статье, вы можете написать более общий цикл в Go, используя for, который работает как цикл while. Шаблон синтаксиса для этой формы:

for (условие) {
оператор (ы);
}

Эта форма цикла for может использоваться в ситуациях, когда вы использовали бы цикл while на других языках. Шаблон синтаксиса для другой формы цикла for таков:

для переменной инициализации; состояние; изменить-переменную {
операторы;
}

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

Вот простой пример цикла for в Go, который печатает числа от 1 до 10:

func main() {
  const stop = 10;
  for i:=1; i <= stop; i++ {
    fmt.Println(i)
  }
}

Шаблон "Сделайте что-то указанное количество раз"

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

Псевдокод этого шаблона следующий:

выполните следующие действия определенное количество раз:
выполните действие или действия

Теперь давайте воспользуемся этим шаблоном для решения некоторых проблем. Первой проблемой будет проблема вычисления процентов, о которой я упоминал ранее. Вот проблема: предположим, что на сберегательном счете есть 1000 долларов для начала, и он приносит простой 1% годовых без дополнительных денег, добавляемых на счет. Каким будет остаток на счете через 20 лет?

Вот решение:

func main() {
  const rate = 1.01
  const numYears = 20
  balance := 1000.00
  for i:=1; i <= numYears; i++ {
    balance *= rate
  }
  fmt.Printf("After %d years, the balance is %.2f.",
             numYears, balance)
}

Вот проблема посложнее. Напишите программу, которая рисует гистограмму, показывающую продажи в трех розничных магазинах в размере 100 долларов. Гистограмма будет состоять из звездочек. Продажи на магазин: Store1 - 2400 долларов США; Store2–3400; и Store3–2200. Используйте циклы for для создания гистограмм.

Вот решение:

func main() {
  const store1 = 240
  const store2 = 3400
  const store3 = 2200
  var bar string
  const star = "*"
  for i:=1; i <= store1/100; i++ {
    bar += star
  }
  fmt.Println("Store1: " + bar)
  bar = ""
  for i:=1; i <= store2/100; i++ {
    bar += star
  }
  fmt.Println("Store2: " + bar)
  bar = ""
  for i:=1; i <= store3/100; i++ {
    bar += star
  }
  fmt.Println("Store3: " + bar)
}

Перейти и для петель

В этой статье продемонстрировано более традиционное использование for loop при реализации шаблона программирования Сделайте что-нибудь заданное количество раз. Реализация for loop в Go интересна тем, что ее можно использовать для замены цикла while, и она имеет некоторые другие синтаксические отличия от того, как for циклы реализованы в других языках.

На мой взгляд, for цикл make в Go превосходит for циклы в других языках. И я упоминал об этом ранее, но наличие одной конструкции цикла для работы делает язык Go более простым в использовании. Подобные ограничения не должны заставлять вас чувствовать себя ограниченными, но должны избавить вас от необходимости принимать решения о том, какую конструкцию цикла использовать. Если вы программируете на Go, ваша конструкция цикла будет for loop независимо от проблемы, которую вы пытаетесь решить.

Спасибо, что прочитали эту статью, и пришлите мне электронное письмо с любыми комментариями или предложениями.