GoDasturchi
Interface Basics: Defining Behavior

Interface Basics: Defining Behavior

Interfeys asoslari: xatti-harakatni belgilash

Shu paytgacha siz aniq turlar bilan ishladingiz: Product, DNSRecord, CacheEntry — har biri qat'iy maydonlarga ega struct edi. Interfeys boshqacha savol beradi: "bu qiymat *nima ega* emas, balki *nima qila oladi*?" Interfeys — metodlar to'plamining nomi, xolos.

example.go
type Shaper interface {
    Area() float64
}

Bu shuni bildiradi: "Area() float64 metodiga ega bo'lgan har qanday tur — Shaperdir". E'tibor bering: hech qanday implements Shaper deb yozish shart emas — Go'da interfeys yashirin (implicit) amalga oshiriladi. Agar tur kerakli metodlarga ega bo'lsa, u avtomatik ravishda o'sha interfeysga mos keladi.

example.go
type Rectangle struct {
    Width, Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// Rectangle endi Shaper interfeysiga mos keladi — buni alohida e'lon qilish shart emas.

Bu — Pointers & Memory kursidagi receiver'lar g'oyasining davomi: metod — bu shunchaki turga bog'langan funksiya. Interfeys esa turli xil receiver'larga ega turlarni bitta umumiy nom ostida birlashtirish imkonini beradi. Bir xil []Shaper slice'i ichida ham Rectangle, ham Circle yashashi mumkin — ularning yagona umumiyligi Area() metodiga ega ekanligi.

>_ Exercise

Area() float64 metodiga ega Shaper interfeysi berilgan. Rectangle{Width, Height float64} va Circle{Radius float64} struct'larini aniqlang va ikkalasi uchun ham Area() metodini yozing (Circle uchun 3.14159 * r * r formulasidan foydalaning). So'ngra TotalArea(shapes []Shaper) float64 funksiyasini yozing — u berilgan barcha shakllar yuzasining yig'indisini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Interfeys — metodlar to'plamining nomi, xolos. Go'da amalga oshirish yashirin: agar tur kerakli metodlarga ega bo'lsa, u avtomatik ravishda o'sha interfeysga mos keladi. Bu turli xil struct'larni (Rectangle, Circle) bitta umumiy []Shaper slice'ida birlashtirish imkonini beradi.

NEXT UP

Standard Library Interfaces: io.Reader

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Interface Basics: Defining Behavior

Interfeys asoslari: xatti-harakatni belgilash

Shu paytgacha siz aniq turlar bilan ishladingiz: Product, DNSRecord, CacheEntry — har biri qat'iy maydonlarga ega struct edi. Interfeys boshqacha savol beradi: "bu qiymat *nima ega* emas, balki *nima qila oladi*?" Interfeys — metodlar to'plamining nomi, xolos.

example.go
type Shaper interface {
    Area() float64
}

Bu shuni bildiradi: "Area() float64 metodiga ega bo'lgan har qanday tur — Shaperdir". E'tibor bering: hech qanday implements Shaper deb yozish shart emas — Go'da interfeys yashirin (implicit) amalga oshiriladi. Agar tur kerakli metodlarga ega bo'lsa, u avtomatik ravishda o'sha interfeysga mos keladi.

example.go
type Rectangle struct {
    Width, Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// Rectangle endi Shaper interfeysiga mos keladi — buni alohida e'lon qilish shart emas.

Bu — Pointers & Memory kursidagi receiver'lar g'oyasining davomi: metod — bu shunchaki turga bog'langan funksiya. Interfeys esa turli xil receiver'larga ega turlarni bitta umumiy nom ostida birlashtirish imkonini beradi. Bir xil []Shaper slice'i ichida ham Rectangle, ham Circle yashashi mumkin — ularning yagona umumiyligi Area() metodiga ega ekanligi.

>_ Exercise

Area() float64 metodiga ega Shaper interfeysi berilgan. Rectangle{Width, Height float64} va Circle{Radius float64} struct'larini aniqlang va ikkalasi uchun ham Area() metodini yozing (Circle uchun 3.14159 * r * r formulasidan foydalaning). So'ngra TotalArea(shapes []Shaper) float64 funksiyasini yozing — u berilgan barcha shakllar yuzasining yig'indisini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Interfeys — metodlar to'plamining nomi, xolos. Go'da amalga oshirish yashirin: agar tur kerakli metodlarga ega bo'lsa, u avtomatik ravishda o'sha interfeysga mos keladi. Bu turli xil struct'larni (Rectangle, Circle) bitta umumiy []Shaper slice'ida birlashtirish imkonini beradi.

NEXT UP

Standard Library Interfaces: io.Reader