15 / 68

Break and Continue

Siklni to'xtatish va davom ettirish

Go dasturlash tilida ba'zan sikl to'liq bajarilmasdan turib uni to'xtatish yoki ma'lum bir iteratsiyani tashlab o'tish talab qilinadi. Buning uchun break va continue operatorlaridan foydalaniladi.

Ushbu operatorlar deyarli har doim shartli ifodalar (if...else) bilan birgalikda ishlatiladi.


1. Go break operatori

break operatori bajarilganda, sikl darhol o'z ishini yakunlaydi va dastur boshqaruvi sikldan keyingi qatorga o'tadi.

Sintaksis:

example.go
for boshlang'ich_qiymat; shart; o'zgarish {
    if shart {
        break
    }
    // sikl tanasi
}

Bu yerda sikl sharti bajarilishidan qat'i nazar, break operatori siklni muddatidan oldin to'xtatadi.

Go break ishlash sxemasi

Go break operatorining ishlash sxemasi


Misol 1: Go break operatorining qo'llanishi

Quyidagi misolda 1 dan 5 gacha bo'lgan sonlarni chiqaruvchi for siklidan foydalanamiz, lekin i == 3 bo'lganda break operatorini chaqiramiz:

example.go
package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        // i ning qiymati 3 ga teng bo'lganda siklni to'xtatamiz
        if i == 3 {
            break
        }
        fmt.Println(i)
    }
}

Natija:

kod
1
2

Tushuntirish:

  1. Dastlab i = 1 va i = 2 bo'lganda i == 3 sharti yolg'on (false), shuning uchun 1 va 2 ekranga chop etiladi.
  2. i = 3 bo'lganda if i == 3 sharti rost (true) bo'ladi va break operatori ishga tushadi.
  3. break butun for siklini to'xtatadi, natijada 3, 4 va 5 chop etilmaydi.

Ichma-ich sikllarda break (Nested Loops)

Ichma-ich (nested) sikllar mavjud bo'lganda, break operatori faqat o'zi joylashgan ichki siklni to'xtatadi, tashqi sikl esa o'z ishini davom ettiradi:

example.go
package main

import "fmt"

func main() {
    // Tashqi for sikli
    for i := 1; i <= 3; i++ {
        // Ichki for sikli
        for j := 1; j <= 3; j++ {
            // Faqat ichki for siklini to'xtatadi
            if i == 2 {
                break
            }
            fmt.Printf("i = %d, j = %d\n", i, j)
        }
    }
}

Natija:

kod
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3

Bu yerda i == 2 bo'lganda ichki sikl to'xtatilgani sababli i = 2 bo'lgan qatorlar ekranga chiqmaydi, ammo i = 3 uchun tashqi sikl yana ishlaydi.


2. Go continue operatori

continue operatori butun siklni to'xtatmaydi, balki siklning joriy iteratsiyasidagi (aylanishidagi) qolgan kodlarni tashlab o'tib, dastur boshqaruvini darhol keyingi iteratsiyaga uzatadi.

Sintaksis:

example.go
for boshlang'ich_qiymat; shart; o'zgarish {
    if shart {
        continue
    }
    // davom etuvchi sikl tanasi
}

Go continue ishlash sxemasi

Go continue operatorining ishlash sxemasi


Misol 2: Go continue operatorining qo'llanishi

Keling, 1 dan 5 gacha sanaydigan siklda i == 3 bo'lganda continue operatorini qo'llaymiz:

example.go
package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        // i teng 3 bo'lganda ushbu qadamni tashlab o'tamiz
        if i == 3 {
            continue
        }
        fmt.Println(i)
    }
}

Natija:

kod
1
2
4
5

Tushuntirish:

  1. i = 3 bo'lgan paytda if i == 3 sharti bajariladi va continue chaqiriladi.
  2. Natijada fmt.Println(i) bajarilmay qolib, sikl darhol i++ ga o'tadi (i = 4).
  3. Shu sababli ekranda 3 soni ko'rinmaydi.

Ichma-ich sikllarda continue (Nested Loops)

Ichma-ich sikllarda continue operatori chaqirilganda, u faqat o'zi tegishli bo'lgan ichki siklning joriy iteratsiyasini tashlab o'tadi:

example.go
package main

import "fmt"

func main() {
    for i := 1; i <= 3; i++ {
        for j := 1; j <= 3; j++ {
            // Faqat ichki siklning joriy qadamini tashlab o'tadi
            if j == 2 {
                continue
            }
            fmt.Printf("i = %d, j = %d\n", i, j)
        }
    }
}

Natija:

kod
i = 1, j = 1
i = 1, j = 3
i = 2, j = 1
i = 2, j = 3
i = 3, j = 1
i = 3, j = 3

E'tibor berganingizdek, j == 2 bo'lgan barcha holatlarda qadam tashlab o'tildi va j = 2 qiymati ekranga chiqmadi.