cpp

Цикл for

Циклы позволяют выполнить одни и те же инструкции многократно. Предположим, нужно вывести все числа от 1 до 100 по одному на строке. Обычным способом пришлось бы писать 100 строк кода:

fmt.Println(1)
fmt.Println(2)
// ...
fmt.Println(100)

С помощью цикла то же действие можно выполнить тремя строками кода:

for i := 1; i <= 100; i++ {
   fmt.Println(i)
}

Полный формат

Цикл for используется для выполнения выражений определенное число раз. Цикл имеет следующий формат:

for <Начальное значение>; <Условие>; <Приращение> {
   <Инструкции>
}

Параметры имеют следующие значения:

  • <Начальное значение> — присваивает переменной-счетчику начальное значение;
  • <Условие> — содержит логическое выражение. Пока логическое выражение возвращает значение true, выполняются инструкции внутри цикла;
  • <Приращение> — задает изменение переменной-счетчика на каждой итерации.

Последовательность работы цикла for:

  1. Переменной-счетчику присваивается начальное значение.
  2. Проверяется условие, если оно истинно, выполняются инструкции внутри цикла, а в противном случае выполнение цикла завершается.
  3. Переменная-счетчик изменяется на величину, указанную в <Приращение>.
  4. Переход к п. 2.

Переменная-счетчик может быть объявлена как вне цикла for, так и в параметре <Начальное значение>. Если переменная объявлена в параметре, то она будет видна только внутри цикла. Кроме того, допускается объявить переменную вне цикла и сразу присвоить ей начальное значение. В этом случае параметр <Начальное значение> можно оставить пустым. Пример:

var i int // Объявление вне цикла
for i = 1; i <= 20; i++ {
   fmt.Println(i)
}
// Переменная i видна вне цикла
fmt.Println(i) // 21
// Объявление внутри цикла
for j := 1; j <= 20; j++ {
   fmt.Println(j)
}
// Переменная j НЕ видна вне цикла
var k int = 1 // Инициализация вне цикла
for ; k <= 20; k++ {
   fmt.Println(k)
}

Цикл выполняется до тех пор, пока <Условие> не вернет false. Если это не произойдет, то цикл будет бесконечным. Логическое выражение, указанное в параметре <Условие>, вычисляется на каждой итерации. Поэтому, если внутри логического выражения производятся какие-либо вычисления и значение не изменяется внутри цикла, то вычисление следует вынести в параметр <Начальное значение>. В этом случае вычисление указывается после присваивания значения переменной-счетчику используя позиционное присваивание. Пример:

for i, j := 1, 10 + 30; i <= j; i++ {
   fmt.Println(i)
}

Выражение, указанное в параметре <Приращение>, может не только увеличивать значение переменной-счетчика, но и уменьшать его. Кроме того, значение может изменяться на любую величину. Пример:

// Выводим числа от 100 до 1
for i := 100; i > 0; i-- {
   fmt.Println(i)
}
// Выводим четные числа от 1 до 100
for j := 2; j <= 100; j += 2 {
   fmt.Println(j)
}

Если переменная-счетчик изменяется внутри цикла, то выражение в параметре <Приращение> можно вообще не указывать:

for i := 1; i <= 10; {
   fmt.Println(i)
   i++ // <Приращение>
}

Все параметры цикла for и инструкции внутри цикла являются необязательными. Хотя параметры можно не указывать, точки с запятой обязательно должны быть. Если все параметры не указаны, то цикл окажется бесконечным. Чтобы выйти из бесконечного цикла следует использовать оператор break. Пример:

var i int = 1      // <Начальное значение>
for ; ; {          // Бесконечный цикл
   if i <= 10 {    // <Условие>
      fmt.Println(i)
      i++          // <Приращение>
   } else {
      break        // Выходим из цикла
   }
}

Сокращенный формат

Существует также сокращенный формат цикла for, который аналогичен циклу while из других языков программирования:

<Начальное значение>
for <Условие> {
   <Инструкции>
   <Приращение>
}

Последовательность работы:

  1. Переменной-счетчику присваивается начальное значение.
  2. Проверяется условие, если оно истинно, выполняются инструкции внутри цикла, иначе выполнение цикла завершается.
  3. Переменная-счетчик изменяется на величину, указанную в <Приращение>.
  4. Переход к п. 2.

Выведем все числа от 1 до 100:

var i int = 1      // <Начальное значение>
for i <= 100 {     // <Условие>
   fmt.Println(i)  // <Инструкции>
   i++             // <Приращение>
}
Внимание!

Бесконечное выполнение инструкций

Существует еще один формат цикла for, внутри блока которого инструкции выполняются бесконечное число раз:

for {
   <Инструкции>
}

Чтобы выйти из бесконечного цикла нужно вызвать оператор break или нажать комбинацию клавиш <Ctrl>+<C> в окне консоли. Пример:

var i int = 1      // <Начальное значение>
for {              // Бесконечный цикл
   if i <= 10 {    // <Условие>
      fmt.Println(i)
      i++          // <Приращение>
   } else {
      break        // Выходим из цикла
   }
}

Перебор элементов массива, словаря и строки

Цикл for позволяет также перебирать элементы массива, слайса, словаря, строки и канала (см. разд. 18.6.4). Форматы цикла:

for <Индекс>[, <Значение>] := range <Массив или слайс> {
   <Инструкции>
}
for <Ключ>[, <Значение>] := range <Словарь> {
   <Инструкции>
}
for <Индекс>[, <Буква (тип rune)>] := range <Строка> {
   <Инструкции>
}
for <Значение> := range <Канал> {
   <Инструкции>
}

Пример перебора элементов массива и слайса:

var arr1 = [3]int{10, 20, 30}
for index, value := range arr1 {
   fmt.Println(index, value)
}
var arr2 = []int{40, 50, 60}
for index, value := range arr2 {
   fmt.Println(index, value)
}

Результат в окне консоли:

0 10
1 20
2 30
0 40
1 50
2 60

Пример перебора элементов словаря:

var dict = map[string]int {
   "x": 10,
   "y": 20,
   "z": 30,
}
for key, value := range dict {
   fmt.Println(key, value)
}

Результат в окне консоли:

x 10
y 20
z 30

Пример перебора символов строки:

str := "тест"
for index, ch := range str {
   fmt.Println(index, ch, string(ch))
}

Результат в окне консоли:

0 1090 т
2 1077 е
4 1089 с
6 1090 т

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp