Break va Continue — sikl oqimini boshqarish uchun ishlatiladigan ikkita kalit so’z. break siklni butunlay to’xtatadi, continue esa faqat joriy aylanishni o’tkazib, keyingisiga o’tadi — Go’da bu ikkalasi ham, for yagona sikl turi bo’lgani kabi, universal ishlaydi.
break / continue —
break— eng ichki sikl yokiswitchdan darhol chiqadi.continue— joriy iteratsiyaning qolgan qismini o’tkazib, siklning keyingi aylanishiga o’tadi.
continue — joriy aylanishni o’tkazib yuborish
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
}
1
3
5
Har bir juft son uchun continue ishga tushadi va o’sha aylanishning qolgan kodi (fmt.Println(i)) bajarilmay, keyingi songa o’tiladi. Natijada faqat toq sonlar chop etiladi.
break — siklni to’xtatish
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 4 {
break
}
fmt.Println(i)
}
}
1
2
3
i == 4 bo’lgach break ishga tushib, sikl butunlay to’xtadi — 4dan 10gacha bo’lgan sonlar hech qachon tekshirilmadi ham.
Ichma-ich sikl va yorliqli (labeled) break
Ichma-ich sikllarda oddiy break faqat eng ichki siklni to’xtatadi. Tashqi siklni ham to’xtatish uchun yorliq (label) ishlatiladi:
package main
import "fmt"
func main() {
Tashqi:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if j == 1 {
break Tashqi
}
fmt.Println(i, j)
}
}
}
0 0
Tashqi: — sikldan oldin qo’yilgan yorliq. break Tashqi — faqat ichki emas, aynan Tashqi yorliqli siklning o’zini to’xtatadi. Shu sabab natija atigi bitta qator — j == 1 bo’lgan zahoti butun ikki qavatli sikl to’xtaydi. Xuddi shu tarzda continue Tashqi ham yozish mumkin — u tashqi siklning keyingi aylanishiga o’tkazadi.
switch ichidagi break
switch blokining o’zi ham breakga “shaffof” emas — switch ichidagi break faqat o’sha switchni tugatadi, uni o’rab turgan siklni emas:
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
switch i {
case 1:
break
default:
fmt.Println(i)
}
}
}
0
2
i == 1 bo’lganda break faqat switchni to’xtatdi, for sikli esa davom etaverdi (2 ham chop etildi). Agar bu yerda tashqi siklni to’xtatish kerak bo’lganda, oldingi bo’limdagi kabi yorliqli break zarur bo’lardi.