Darsliklar Ruby Konstruktor

Ruby Ruby Konstruktor

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.

initializeRuby’da konstruktor vazifasini bajaruvchi, qat’iy shu nom bilan yoziladigan metod. .new chaqirilganda 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.