GoDasturchi
Remove Unnecessary Getters/Setters

Remove Unnecessary Getters/Setters

Keraksiz getter/setterlarni olib tashlang

Ba'zi tillarda har bir maydon uchun getName()/setName() yozish odat. Go'da esa, agar maydon eksport qilingan (katta harf) bo'lsa, unga to'g'ridan-to'g'ri murojaat qilish mumkin — bunday "o'rovchi" metodlar shunchaki ortiqcha kod.

example.go
package main

import "fmt"

// Yomon: keraksiz o'rash
type UserOld struct {
	name string
}

func (u *UserOld) GetName() string  { return u.name }
func (u *UserOld) SetName(n string) { u.name = n }

// Yaxshi: hech qanday himoya mantig'i kerak bo'lmasa, maydonni to'g'ridan-to'g'ri eksport qiling
type User struct {
	Name string
}

func main() {
	u := User{Name: "Aziz"}
	u.Name = "Bobur" // to'g'ridan-to'g'ri, hech qanday metod kerak emas
	fmt.Println(u.Name)
}

Getter/setter qachon kerak bo'ladi? Faqat qiymatni o'zgartirishda haqiqiy mantiq bo'lsa (masalan tekshirish, hisoblash, yon ta'sir) — masalan avvalgi darsda ko'rgan Cache.Set metodi (lazy initialization qilgani uchun). Agar metod shunchaki return u.name/u.name = n qilsa va boshqa hech narsa qilmasa — u hech qanday qiymat qo'shmaydi, faqat kodni uzaytiradi.

>_ Exercise

Keraksiz getter/setterlarni olib tashlang.

  • Product struct'ida Price maydonini to'g'ridan-to'g'ri eksport qiling (getter/setter kerak emas)
  • Price'ni to'g'ridan-to'g'ri o'zgartirib, chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Qiymatni o'zgartirishda qo'shimcha mantiq bo'lmasa, getter/setter yozmang — maydonni to'g'ridan-to'g'ri eksport qiling.

NEXT UP

Avoid Premature Abstraction

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Remove Unnecessary Getters/Setters

Keraksiz getter/setterlarni olib tashlang

Ba'zi tillarda har bir maydon uchun getName()/setName() yozish odat. Go'da esa, agar maydon eksport qilingan (katta harf) bo'lsa, unga to'g'ridan-to'g'ri murojaat qilish mumkin — bunday "o'rovchi" metodlar shunchaki ortiqcha kod.

example.go
package main

import "fmt"

// Yomon: keraksiz o'rash
type UserOld struct {
	name string
}

func (u *UserOld) GetName() string  { return u.name }
func (u *UserOld) SetName(n string) { u.name = n }

// Yaxshi: hech qanday himoya mantig'i kerak bo'lmasa, maydonni to'g'ridan-to'g'ri eksport qiling
type User struct {
	Name string
}

func main() {
	u := User{Name: "Aziz"}
	u.Name = "Bobur" // to'g'ridan-to'g'ri, hech qanday metod kerak emas
	fmt.Println(u.Name)
}

Getter/setter qachon kerak bo'ladi? Faqat qiymatni o'zgartirishda haqiqiy mantiq bo'lsa (masalan tekshirish, hisoblash, yon ta'sir) — masalan avvalgi darsda ko'rgan Cache.Set metodi (lazy initialization qilgani uchun). Agar metod shunchaki return u.name/u.name = n qilsa va boshqa hech narsa qilmasa — u hech qanday qiymat qo'shmaydi, faqat kodni uzaytiradi.

>_ Exercise

Keraksiz getter/setterlarni olib tashlang.

  • Product struct'ida Price maydonini to'g'ridan-to'g'ri eksport qiling (getter/setter kerak emas)
  • Price'ni to'g'ridan-to'g'ri o'zgartirib, chop eting

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Qiymatni o'zgartirishda qo'shimcha mantiq bo'lmasa, getter/setter yozmang — maydonni to'g'ridan-to'g'ri eksport qiling.

NEXT UP

Avoid Premature Abstraction