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.
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.
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
$ go run main.go
Kodingizni ishga tushiring