Модульні уроки (2/5)
для: єдина петля
У Go є єдина конструкція циклу: for. Ні while, ні
do-while, ні foreach (що надходить на наступному уроці з
range). Одне ключове слово охоплює всі випадки завдяки трьом формам.
Три форми for
Класична форма з трьох речень
Ідентичний C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i має область дії, обмежену for. Ці три речення необов’язкові (ви можете
опустіть будь-який із них), але ; залишиться, якщо ви опустите проміжний.
форма "поки": лише умова
У Go, while є просто for з одним виразом bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Нескінченна форма
Без пропозицій цикл ніколи не припиняється (якщо не break/return):
for {
if exitCondition() {
break
}
doWork()
}Це шаблон для циклів обробки подій, серверів, політик повторів.
break, continue та мітки
break виходить із внутрішнього циклу, continue переходить до наступної ітерації:
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}Для виходу з вкладених циклів існують мітки (рідкісні, але корисні):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}Немає оператора ,, як у C
У Go не можна писати for i, j := 0, 10; i < j; i, j = i+1, j-1:
пост-вираз не приймає багаторазові призначення. Використовуйте Go
синтаксис множинного призначення:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}Натомість це працює, оскільки i, j = i+1, j-1 є одним
багаторазове призначення.
Спробуйте
Виведіть числа від 0 до 4 включно з класичним трьома реченнями for.
Показати підказку
`для ініціалізації; конд; post { ... }` — тут ініціалізація `i := 0`.
Рішення доступне після 3 спроб
Підсумуйте всі числа від 1 до 10 включно, використовуючи форму «while» для.
Показати підказку
форма 'while': `for <умова> { ... }`.
Рішення доступне після 3 спроб
Яка форма представляє нескінченний цикл у Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Підведення підсумків
- Одне ключове слово
forз трьома формами: класична, поки, нескінченна. break/continueдодатково з міткою для вкладених циклів.- Мітка
Name:передfor, використовуйте обережно. - Ні
,як оператор: використовуйте множинне призначенняi, j = ..., ....