GoDasturchi
iota and Const Patterns

iota and Const Patterns

iota va const naqshlari

Bir-biriga bog'liq bo'lgan bir nechta doimiyni (masalan, holatlar ro'yxati) qo'lda raqamlash zerikarli va xatoga moyil. Go maxsus identifikator beradi — `iota`: const blokining har bir qatorida avtomatik ravishda 0dan boshlab oshib boradigan hisoblagich.

example.go
type Status int

const (
    StatusPending Status = iota  // 0
    StatusActive                 // 1 (avtomatik davom etadi)
    StatusClosed                 // 2
)

Bu — DNS Resolver kursidagi maxsus turlar (type DNSCache map[...]...) g'oyasining davomi: Statusni intning o'zi emas, alohida tur qilib e'lon qilish, tasodifan boshqa int qiymatlarni Status o'rnida ishlatib qo'yishning oldini oladi. iotaning yana bir kuchli qo'llanilishi — bit-siljish orqali o'lchov birliklarini hisoblash:

example.go
const (
    _  = iota                    // 0 ni tashlab yuborish
    KB = 1 << (10 * iota)        // 1 << 10 = 1024
    MB                            // 1 << 20
    GB                            // 1 << 30
)

Har bir qatorda iota qiymati oshib boradi (hatto ifoda takrorlanmasa ham — MB va GB KBdagi bir xil formulani meros qilib oladi, faqat iotaning yangi qiymati bilan). Birinchi qatordagi _ — natijani butunlay rad etish, chunki 1 << 0 = 1 bizga kerak emas.

>_ Exercise

Status int turini va iota yordamida StatusPending (0), StatusActive (1), StatusClosed (2) doimiylarini e'lon qiling. Statusga String() string metodini qo'shing — u har bir holat uchun mos kichik harfli nomni ("pending", "active", "closed") qaytaradi. Shundan so'ng, _ = iota naqshi bilan KB = 1 << (10 * iota), MB va GB doimiylarini e'lon qiling.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

iota bog'liq doimiylar guruhini avtomatik raqamlaydi. Uni maxsus turlar bilan (type Status int) birlashtirib, tur-xavfsiz "enum"lar yaratish mumkin; bit-siljish bilan birlashtirilganda esa o'lchov birliklari (KB, MB, GB) kabi ketma-ket, formulaga asoslangan qiymatlarni hosil qilish mumkin.

NEXT UP

Scope and Shadowing

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

iota and Const Patterns

iota va const naqshlari

Bir-biriga bog'liq bo'lgan bir nechta doimiyni (masalan, holatlar ro'yxati) qo'lda raqamlash zerikarli va xatoga moyil. Go maxsus identifikator beradi — `iota`: const blokining har bir qatorida avtomatik ravishda 0dan boshlab oshib boradigan hisoblagich.

example.go
type Status int

const (
    StatusPending Status = iota  // 0
    StatusActive                 // 1 (avtomatik davom etadi)
    StatusClosed                 // 2
)

Bu — DNS Resolver kursidagi maxsus turlar (type DNSCache map[...]...) g'oyasining davomi: Statusni intning o'zi emas, alohida tur qilib e'lon qilish, tasodifan boshqa int qiymatlarni Status o'rnida ishlatib qo'yishning oldini oladi. iotaning yana bir kuchli qo'llanilishi — bit-siljish orqali o'lchov birliklarini hisoblash:

example.go
const (
    _  = iota                    // 0 ni tashlab yuborish
    KB = 1 << (10 * iota)        // 1 << 10 = 1024
    MB                            // 1 << 20
    GB                            // 1 << 30
)

Har bir qatorda iota qiymati oshib boradi (hatto ifoda takrorlanmasa ham — MB va GB KBdagi bir xil formulani meros qilib oladi, faqat iotaning yangi qiymati bilan). Birinchi qatordagi _ — natijani butunlay rad etish, chunki 1 << 0 = 1 bizga kerak emas.

>_ Exercise

Status int turini va iota yordamida StatusPending (0), StatusActive (1), StatusClosed (2) doimiylarini e'lon qiling. Statusga String() string metodini qo'shing — u har bir holat uchun mos kichik harfli nomni ("pending", "active", "closed") qaytaradi. Shundan so'ng, _ = iota naqshi bilan KB = 1 << (10 * iota), MB va GB doimiylarini e'lon qiling.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

iota bog'liq doimiylar guruhini avtomatik raqamlaydi. Uni maxsus turlar bilan (type Status int) birlashtirib, tur-xavfsiz "enum"lar yaratish mumkin; bit-siljish bilan birlashtirilganda esa o'lchov birliklari (KB, MB, GB) kabi ketma-ket, formulaga asoslangan qiymatlarni hosil qilish mumkin.

NEXT UP

Scope and Shadowing