GoDasturchi
Project: Music Catalog (Storage)

Project: Music Catalog (Storage)

Loyiha: Musiqa katalogi (Saqlash)

example.go
type Phonebook map[string]string

func NewPhonebook() Phonebook {
	return make(Phonebook)
}

func (pb Phonebook) Add(name, number string) {
	pb[name] = number
}

func (pb Phonebook) Lookup(name string) (string, bool) {
	num, ok := pb[name]
	return num, ok
}

Map ustidan tur aniqlash sizga metod biriktirish imkonini beradi. Phonebook shunchaki map[string]string, lekin endi unda Add va Lookup bor.

Maplar ma'lumot turlari (reference types) bo'lgani uchun, metodlar nusxani emas, aslini oladi. Pointer receiver kerak emas. pb[name] = number chaqiruvchining mapini to'g'ridan-to'g'ri o'zgartiradi.

Lookupdagi comma-ok andazasi "kalit topilmadi"ni "kalit nol qiymat bilan mavjud"dan ajratadi. Buni Exists or Not darsida ko'rgansiz. Xuddi shu andaza, endi metodlari bor nomlangan tur ustida.

>_ Exercise

Song va Album turlaringiz tayyor. Endi saqlash qatlamini quring.

Libraryni nomlangan map turi sifatida aniqlang: map[string]Album (albom sarlavhasi bo'yicha kalitlangan).

Quyidagi metodlarni yozing:

  • 1. NewLibrary() Library — ishga tushirilgan bo'sh kutubxonani qaytaradi
  • 2. (lib Library) AddAlbum(a Album) — albomni uning Title'i bo'yicha kalitlab qo'shadi
  • 3. (lib Library) FindAlbum(title string) (Album, bool) — albomni va uning mavjudligini qaytaradi
  • 4. (lib Library) RemoveAlbum(title string) bool — albomni olib tashlaydi, u mavjud bo'lsa true qaytaradi
  • 5. (lib Library) AllSongs() []Song — kutubxonadagi har bir albomning har bir qo'shig'ini qaytaradi

Misollar:

  • lib.AddAlbum(album) uni album.Title ostida saqlaydi
  • lib.FindAlbum("Abbey Road") (Album{...}, true) qaytaradi
  • lib.FindAlbum("Nonexistent") (Album{}, false) qaytaradi
  • Har biri 3 qo'shiqli 2 albomga ega kutubxonada len(lib.AllSongs()) == 6

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Nomlangan map turlari metodlarga ega bo'la oladi. Maplar ma'lumot turlari, shuning uchun pointer receiver kerak emas.

NEXT UP

Project: Music Catalog (Search)

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Project: Music Catalog (Storage)

Loyiha: Musiqa katalogi (Saqlash)

example.go
type Phonebook map[string]string

func NewPhonebook() Phonebook {
	return make(Phonebook)
}

func (pb Phonebook) Add(name, number string) {
	pb[name] = number
}

func (pb Phonebook) Lookup(name string) (string, bool) {
	num, ok := pb[name]
	return num, ok
}

Map ustidan tur aniqlash sizga metod biriktirish imkonini beradi. Phonebook shunchaki map[string]string, lekin endi unda Add va Lookup bor.

Maplar ma'lumot turlari (reference types) bo'lgani uchun, metodlar nusxani emas, aslini oladi. Pointer receiver kerak emas. pb[name] = number chaqiruvchining mapini to'g'ridan-to'g'ri o'zgartiradi.

Lookupdagi comma-ok andazasi "kalit topilmadi"ni "kalit nol qiymat bilan mavjud"dan ajratadi. Buni Exists or Not darsida ko'rgansiz. Xuddi shu andaza, endi metodlari bor nomlangan tur ustida.

>_ Exercise

Song va Album turlaringiz tayyor. Endi saqlash qatlamini quring.

Libraryni nomlangan map turi sifatida aniqlang: map[string]Album (albom sarlavhasi bo'yicha kalitlangan).

Quyidagi metodlarni yozing:

  • 1. NewLibrary() Library — ishga tushirilgan bo'sh kutubxonani qaytaradi
  • 2. (lib Library) AddAlbum(a Album) — albomni uning Title'i bo'yicha kalitlab qo'shadi
  • 3. (lib Library) FindAlbum(title string) (Album, bool) — albomni va uning mavjudligini qaytaradi
  • 4. (lib Library) RemoveAlbum(title string) bool — albomni olib tashlaydi, u mavjud bo'lsa true qaytaradi
  • 5. (lib Library) AllSongs() []Song — kutubxonadagi har bir albomning har bir qo'shig'ini qaytaradi

Misollar:

  • lib.AddAlbum(album) uni album.Title ostida saqlaydi
  • lib.FindAlbum("Abbey Road") (Album{...}, true) qaytaradi
  • lib.FindAlbum("Nonexistent") (Album{}, false) qaytaradi
  • Har biri 3 qo'shiqli 2 albomga ega kutubxonada len(lib.AllSongs()) == 6

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Nomlangan map turlari metodlarga ega bo'la oladi. Maplar ma'lumot turlari, shuning uchun pointer receiver kerak emas.

NEXT UP

Project: Music Catalog (Search)