11 / 68

switch

Tanlash operatori

Go dasturlash tilida switch operatori berilgan ifodaning qiymatiga qarab, bir nechta muqobil variantlardan (case) faqat bittasini tanlab bajarish uchun ishlatiladi.

U ko'p qatorli if...else if...else shartlariga qaraganda ancha toza, ixcham va o'qish uchun qulay sintaksisni taqdim etadi.

switch sintaksisi

example.go
switch ifoda {
case qiymat1:
    // 1-kod bloki
case qiymat2:
    // 2-kod bloki
case qiymat3:
    // 3-kod bloki
default:
    // Hech qaysi case mos kelmasa bajariladi
}

Bu yerda:

  • switch kalit so'zidan keyingi ifoda hisoblanadi.
  • Uning qiymati qaysi case dagi qiymat bilan teng bo'lsa, o'sha blok ishga tushadi.
  • Agar birorta ham case mos kelmasa, default bloki bajariladi.

Goda switch operatorining ishlash sxemasi


1. switch operatoriga misol

Haftaning kun raqamiga qarab uning nomini chiqarish dasturi:

example.go
package main

import "fmt"

func main() {
    dayOfWeek := 3

    switch dayOfWeek {
    case 1:
        fmt.Println("Yakshanba")
    case 2:
        fmt.Println("Dushanba")
    case 3:
        fmt.Println("Seshanba")
    case 4:
        fmt.Println("Chorshanba")
    case 5:
        fmt.Println("Payshanba")
    case 6:
        fmt.Println("Juma")
    case 7:
        fmt.Println("Shanba")
    default:
        fmt.Println("Bunday kun mavjud emas")
    }
}

Natija:

kod
Seshanba

dayOfWeek o'zgaruvchisining qiymati 3 bo'lgani uchun, u case 3: bilan mos keldi va "Seshanba" satri ekranga chiqdi.

[!NOTE] C, C++ yoki Java kabi boshqa dasturlash tillaridan farqli o'laroq, Go tilida har bir case oxiriga break yozish shart emas! Go dasturlash tilida mos kelgan case bajarilishi bilan switch o'z-o'zidan to'xtaydi va blokdan chiqadi.


2. fallthrough kalit so'zi

Agar mos kelgan case bajarilgandan so'ng, keyingi case ham shartiga qaramasdan bajarilishini xohlasak, fallthrough kalit so'zidan foydalanamiz:

example.go
package main

import "fmt"

func main() {
    dayOfWeek := 3

    switch dayOfWeek {
    case 1:
        fmt.Println("Yakshanba")
    case 2:
        fmt.Println("Dushanba")
    case 3:
        fmt.Println("Seshanba")
        fallthrough
    case 4:
        fmt.Println("Chorshanba")
    case 5:
        fmt.Println("Payshanba")
    default:
        fmt.Println("Boshqa kun")
    }
}

Natija:

kod
Seshanba
Chorshanba

Bu yerda case 3: ichida fallthrough ishlatilgani sababli, Go to'xtamasdan keyingi case 4: dagi kodni ham bajardi.


3. Bitta caseda bir nechta qiymatlarni tekshirish

Bir nechta qiymat uchun bir xil harakat bajarilishi kerak bo'lsa, ularni vergul bilan ajratib bitta case ga yozish mumkin:

example.go
package main

import "fmt"

func main() {
    day := "Yakshanba"

    switch day {
    case "Shanba", "Yakshanba":
        fmt.Println("Dam olish kuni (Weekend)")
    case "Dushanba", "Seshanba", "Chorshanba", "Payshanba", "Juma":
        fmt.Println("Ish kuni (Weekday)")
    default:
        fmt.Println("Noto'g'ri kun kiritildi")
    }
}

Natija:

kod
Dam olish kuni (Weekend)

4. Ifodasiz switch (Switch without expression)

Go tilida switch kalit so'zidan keyin ifoda yozmaslik ham mumkin. Bunday holda switch avtomatik tarzda true qiymatini kutadi va har bir case ga alohida mantiqiy shartlarni yozish imkonini beradi:

example.go
package main

import "fmt"

func main() {
    score := 85

    // Ifodasiz switch
    switch {
    case score >= 90:
        fmt.Println("Baho: A (A'lo)")
    case score >= 75:
        fmt.Println("Baho: B (Yaxshi)")
    case score >= 60:
        fmt.Println("Baho: C (Qoniqarli)")
    default:
        fmt.Println("Baho: F (Qoniqarsiz)")
    }
}

Natija:

kod
Baho: B (Yaxshi)

Bu usul uzun if...else if...else zanjirini yozishdan ancha qulay, tushunarli va chiroyli hisoblanadi.


5. switch bilan qo'shimcha ifoda (Optional Statement)

switch kalit so'zidan keyin, tekshiriladigan ifodadan oldin, nuqtali vergul (;) bilan ajratilgan holda qo'shimcha bitta ifodani ham yozish mumkin:

example.go
package main

import "fmt"

func main() {
    // qo'shimcha ifoda (day := 4) va tekshiriladigan ifoda (day) nuqtali vergul bilan ajratilgan
    switch day := 4; day {
    case 1:
        fmt.Println("Yakshanba")
    case 2:
        fmt.Println("Dushanba")
    case 3:
        fmt.Println("Seshanba")
    case 4:
        fmt.Println("Chorshanba")
    case 5:
        fmt.Println("Payshanba")
    case 6:
        fmt.Println("Juma")
    case 7:
        fmt.Println("Shanba")
    default:
        fmt.Println("Bunday kun mavjud emas")
    }
}

Natija:

kod
Chorshanba

Bu yerda day := 4 — qo'shimcha ifoda, day esa switch tekshiradigan asosiy ifoda. day qiymati 4 bo'lgani uchun case 4: ishga tushib, "Chorshanba" chop etiladi.