Konstruktor — obyekt yaratilgan zahoti avtomatik ishlaydigan maxsus metod. Oldingi darsda obyektni ikki bosqichda (.new, so’ng alohida sozlash metodi) tayyorlashga to’g’ri keldi — konstruktor buni bitta qadamga tushiradi.
initialize — Ruby’da konstruktor vazifasini bajaruvchi, qat’iy shu nom bilan yoziladigan metod.
.newchaqirilganda Ruby uni avtomatik topib ishga tushiradi — uni to’g’ridan-to’g’ri o’zingiz chaqira olmaysiz.
initialize metodi
initialize deb nomlangan metod .new chaqirilganda avtomatik ishlaydi:
class Foydalanuvchi
def initialize
@ism = "mehmon"
puts "Yangi foydalanuvchi yaratildi"
end
def ism
@ism
end
end
u = Foydalanuvchi.new
puts u.ism
Yangi foydalanuvchi yaratildi
mehmon
Foydalanuvchi.new chaqirilishi bilanoq initialize avtomatik ishga tushdi va @ismga standart qiymat berdi. Biz uni hech qayerda o’zimiz chaqirmadik.
Parametrli initialize
initialize ham oddiy metod kabi parametr qabul qila oladi — bu obyektni yaratish paytidayoq to’liq sozlashning eng tabiiy yo’li:
class Mahsulot
def initialize(nomi, narxi)
@nomi = nomi
@narxi = narxi
end
def malumot
"#{@nomi} — #{@narxi} so'm"
end
end
telefon = Mahsulot.new("iPhone", 12000000)
puts telefon.malumot
iPhone — 12000000 so'm
Mahsulot.new("iPhone", 12000000) — argumentlar to’g’ridan-to’g’ri initializega uzatiladi. Oldingi darsdagi ikki bosqichli (new, keyin sozla) yondashuvdan farqli, obyekt bir qatorda to’liq tayyor holatda tug’iladi.
Standart qiymatli parametrlar bilan initialize
initialize ham metod parametrlari darsida ko’rgan barcha shakllarni — standart qiymat, splat, nomlangan parametrlarni — qabul qiladi:
class Hisob
def initialize(egasi, balans: 0)
@egasi = egasi
@balans = balans
end
def malumot
"#{@egasi}: #{@balans} so'm"
end
end
birinchi = Hisob.new("Farrux")
ikkinchi = Hisob.new("Master Sherkulov", balans: 500000)
puts birinchi.malumot
puts ikkinchi.malumot
Farrux: 0 so'm
Master Sherkulov: 500000 so'm
balans: 0 — nomlangan, standart qiymatli parametr. Birinchi obyekt uni bermadi va standart 0 bilan yaratildi, ikkinchisi esa aniq qiymat bilan.
initialize ichida boshqa metodni chaqirish
initialize ichida obyektning boshqa instans metodlarini ham chaqirish mumkin — bu murakkab sozlash mantig’ini tartibli bo’laklarga ajratadi:
class Talaba
def initialize(ism, ball)
@ism = ism
@ball = ball
baholash
end
def baholash
@daraja = @ball >= 60 ? "o'tdi" : "yiqildi"
end
def malumot
"#{@ism}: #{@ball} ball (#{@daraja})"
end
end
t = Talaba.new("Aziz", 75)
puts t.malumot
Aziz: 75 ball (o'tdi)
initialize ichida chaqirilgan baholash — hosila qiymat (@daraja)ni hisoblab, uni ham obyekt holatining bir qismiga aylantirdi. Bu naqsh murakkab obyektlarni yaratishda kodni toza saqlaydi.