Darsliklar Go Lang Break va Continue

Go Lang Go Lang Break va Continue

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 / continuebreak — eng ichki sikl yoki switchdan 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.