Method
Method mavzusini boshlashdan oldin funksiya
va struc
ga qisqacha to'xtalib o'tsak maqsadga muvofiq bo'ladi.
Funksiya va Struct
Go tilida funksiya va struct — bu kodni modular qilish va ma’lumotlarni tuzilmaviy saqlashning asosiy elementlari hisoblanadi.
- Funksiya — takrorlanadigan kod bloklarini guruhlash va chaqirish imkonini beradi.
- Struct — turli turdagi ma’lumotlarni bir obyekt sifatida guruhlash va saqlash imkonini beruvchi, foydalanuvchi tomonidan yaratiladigan ma’lumot tuzilmasi bo‘lib, u yangi tur (type) hisoblanadi.
Struct bilan funksiyani birga ishlatish
package main
import "fmt"
type Avtomobil struct {
Model string
Narx int
}
func AvtoInfo(avto Avtomobil) {
fmt.Printf("Model: %s\nNarxi: $%d", avto.Model, avto.Narx)
}
func main() {
mashina := Avtomobil{Model: "Tesla", Narx: 90000}
AvtoInfo(mashina)
}
Natija:
Yuqoridagi misolda funksiyaga avto
deb nomalngan argument
berildi va uning turi esa Avtomobil
bo'ldi. Sababi
struct
ham bu tur! Boshqa turlardan farqi struct
bilan dasturchi o'z turini hosil qilishi mumkin. struct
e'lon
qilinishiga ham e'tibor bering type
bilan boshlanyapdi bundan yangi tur e'lon qilinayotganini xulosa qilish mumkin.
Method
Info
Method — struct yoki boshqa tur (type) ga bog‘langan funksiya bo‘lib, u shu turga oid amallarni bajarish uchun xizmat qiladi.
method va funksiya farqi
- Oddiy funksiya hech qanday ma’lumot turiga bog‘liq emas.
- Method esa aniq bir tur (struct yoki type) ga bog‘lanadi va u orqali shu tur bilan bog‘liq amallarni bajarishi mumkin.
Yquoridagi Avtomobil
struct(yangi tur)imiz misolida method nima ekanini tushinishga harakat qilamiz. Bu misolda funksiya va struct
bir biriga bog'liq emas, shunchaki Avtomobil
turimizni ma'lumotlarini chop qilish uchun xolos. Quyida method
ga
o'zgartirib ko'ramiz.
Biror funksiya struct
method
i ekanligini bildirish uchun funksiyani e'lon qilshda, funksiya nomidan oldin qo'shimcha
argument
qo'shish kerak bo'ladi. Bu quyidagicha amalga oshiriladi:
Yuqoridagi misolda AvtoInfo()
funksiya nomi, bu funksiyani qaysi struct
ga tegishli ekanini esa (avto Avtomobil)
bildiryapdi.
Bu misoldagi misolni to'ldirib ishga tushirib ko'ramiz:
Natija:
E'tibor bering AvtoInfo()
funksiyasi o'zi emas balki Avtomobil
structi bilan ishga tushirildi. Bu AvtoInfo
funksiyasi
Avtomobil
ga tegishli method ekanligini anglatadi.
Struct method va pointer
Agar struct
ichidagi ma’lumotlarni method
orqali o‘zgartirish kerak bo‘lsa, pointer receiver
(*) dan foydalanish lozim.
Pointerga misol:
Natija:
Info
Go avtomatik ravishda struct
obyektlarini pointer
ga aylantirib beradi!
Struct methodlarini *
(pointer receiver) bilan e'lon qilsak ham,
obyektni yaratishda &
bilan berish shart emas. Method chaqirilganda avtomatik
pointerga aylanadi.
Oddiy Receiver (T) va Pointer Receiver (*T) farqlari
Xususiyat | Oddiy Receiver (T ) |
Pointer Receiver (*T ) |
---|---|---|
Method structning nusxasi bilan ishlaydi | ✅ | ❌ |
Asl obyektni o‘zgartiradi | ❌ | ✅ |
Xotirani tejaydi | ❌ | ✅ |
Katta struct uchun samarali | ❌ | ✅ |
Mutatsiya (o‘zgarish) qilish uchun ishlatiladi | ❌ | ✅ |