GoDasturchi
Interface Composition: Building Larger Interfaces

Interface Composition: Building Larger Interfaces

Interfeys kompozitsiyasi: kattaroq interfeyslar qurish

Xuddi struct'larni kichik struct'lardan kompozitsiya qilganingiz kabi (Composite Types kursi), interfeyslarni ham kichik interfeyslardan kompozitsiya qilish mumkin. Standart kutubxonada buning klassik namunasi bor: io.ReadWriter, io.Reader va io.Writerning kombinatsiyasi:

example.go
type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

type ReadWriter interface {
    Reader
    Writer
}

ReadWriterga mos kelish uchun tur ham Read, ham Write metodlariga ega bo'lishi kerak. Bu — Go Basics kursidagi toSlug darsida ko'rgan kompozitsiya g'oyasining aynan o'zi: kichik, aniq maqsadli qismlarni birlashtirib, kattaroq imkoniyat yaratasiz — faqat bu safar funksiyalar o'rniga interfeyslar bilan.

Kichik interfeyslar (bitta yoki ikkita metodli) katta, hamma narsani qamrab oluvchi interfeyslardan ko'ra afzalroq: ular chaqiruvchidan faqat kerakli narsani talab qiladi, va kerak bo'lganda ularni erkin birlashtirish mumkin.

>_ Exercise

Name() string metodiga ega Named interfeysi va Age() int metodiga ega Aged interfeysini aniqlang. So'ngra ikkalasini birlashtirgan Person interfeysini yarating (Named va Agedni ichiga kiritish orqali). Employee{FullName string, Years int} struct'ini yozib, unga Name() va Age() metodlarini qo'shing. Nihoyat, Greet(p Person) string funksiyasini yozing — u "Salom, <Name>! Siz <Age> yoshdasiz." qatorini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Interfeyslarni struct'lar kabi kichik qismlardan kompozitsiya qilish mumkin: kattaroq interfeys ichiga kichik interfeyslarning nomini yozish — ularning barcha metodlarini meros qilib olish demakdir. Bu Go kodini kichik, aniq maqsadli interfeyslarga bo'lib, kerak bo'lganda ularni birlashtirishga undaydi.

Finish
OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Interface Composition: Building Larger Interfaces

Interfeys kompozitsiyasi: kattaroq interfeyslar qurish

Xuddi struct'larni kichik struct'lardan kompozitsiya qilganingiz kabi (Composite Types kursi), interfeyslarni ham kichik interfeyslardan kompozitsiya qilish mumkin. Standart kutubxonada buning klassik namunasi bor: io.ReadWriter, io.Reader va io.Writerning kombinatsiyasi:

example.go
type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

type ReadWriter interface {
    Reader
    Writer
}

ReadWriterga mos kelish uchun tur ham Read, ham Write metodlariga ega bo'lishi kerak. Bu — Go Basics kursidagi toSlug darsida ko'rgan kompozitsiya g'oyasining aynan o'zi: kichik, aniq maqsadli qismlarni birlashtirib, kattaroq imkoniyat yaratasiz — faqat bu safar funksiyalar o'rniga interfeyslar bilan.

Kichik interfeyslar (bitta yoki ikkita metodli) katta, hamma narsani qamrab oluvchi interfeyslardan ko'ra afzalroq: ular chaqiruvchidan faqat kerakli narsani talab qiladi, va kerak bo'lganda ularni erkin birlashtirish mumkin.

>_ Exercise

Name() string metodiga ega Named interfeysi va Age() int metodiga ega Aged interfeysini aniqlang. So'ngra ikkalasini birlashtirgan Person interfeysini yarating (Named va Agedni ichiga kiritish orqali). Employee{FullName string, Years int} struct'ini yozib, unga Name() va Age() metodlarini qo'shing. Nihoyat, Greet(p Person) string funksiyasini yozing — u "Salom, <Name>! Siz <Age> yoshdasiz." qatorini qaytaradi.

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Interfeyslarni struct'lar kabi kichik qismlardan kompozitsiya qilish mumkin: kattaroq interfeys ichiga kichik interfeyslarning nomini yozish — ularning barcha metodlarini meros qilib olish demakdir. Bu Go kodini kichik, aniq maqsadli interfeyslarga bo'lib, kerak bo'lganda ularni birlashtirishga undaydi.