:new() Kurucusu
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 8 / 70.
Nesneleri manuel olarak oluşturmak, boş bir tablo oluşturmak, metatablosunu ayarlamak ve __index bağlantısını kurmak tekrarlayıcıdır. Standart çözüm, tüm bunları sizin için gerçekleştiren bir :new() kurucu metodunu doğrudan sınıfta tanımlamaktır.
İşte kalıp:
local Dog = {}
Dog.__index = Dog
function Dog:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function Dog:bark()
print("Woof!")
end:new() içinde neler olduğunu adım adım inceleyelim. Öncelikle instance adlı boş bir tablo oluştururuz. Ardından metatablosunu self olarak ayarlarız; Dog:new() çağrıldığında bu Dog olur.
Dog.__index Dog nesnesinin kendisini gösterdiğinden, örnek Dog içinde tanımlanan tüm metotları bulabilir. Son olarak yeni nesneyi döndürürüz.
Yapıcının dışındaki Dog.__index = Dog satırına dikkat edin. Bu yaygın bir kısayoldur; ayrı bir metatablo oluşturmak yerine sınıf tablosu hem prototip hem de metatablo görevi görür.
Artık nesneler oluşturmak temiz ve tutarlıdır:
local myDog = Dog:new()
myDog:bark() -- Çıktı: Woof!Oluşturduğunuz her sınıf aynı yapıyı izleyecektir. :new() yapıcısı, nesne oluşturmanın gerçekleştiği tek yer hâline gelir ve kodunuzu düzenli ve öngörülebilir kılar.
Görev
KolayAz önce öğrendiğin standart kurucu desenini kullanarak bir Cat sınıfı oluşturalım. Uygun modül yapısını uygulamak için kodunu iki dosyaya ayıracaksın.
Şunları oluşturacaksın:
Cat.lua: Tam kurucu deseniyleCatsınıfını tanımla. Sınıfın şunları içermeli:- Kendisine işaret eden
__indexdeğerine sahip sınıf tablosu - Bir örnek oluşturan, metatablosunu ayarlayan ve örneği döndüren
:new()kurucusu - Kedinin sesini yazdıran bir
:meow()metodu
- Kendisine işaret eden
main.lua: Cat modülünü içe aktar ve bir kedi örneği oluşturmak için kurucuyu kullan. Ardından her şeyin doğru şekilde bağlandığını doğrulamak için metodunu çağır.
Bir girdi alacaksın: kedinin kaç kez miyavlaması gerektiğini belirten sayı.
:meow() metodun tam olarak şunu yazdırmalı:
Meow!Ana dosyanda Cat:new() kullanarak bir kedi oluştur ve :meow() metodunu belirtilen sayıda çağır.
Örneğin girdi 3 ise çıktı şöyle olmalı:
Meow!
Meow!
Meow!Kendin dene
-- Cat modülünü gerektir
local Cat = require('Cat')
-- Girdiyi oku: miyavlama sayısı
local times = tonumber(io.read())
-- TODO: Cat:new() kullanarak bir kedi örneği oluştur
-- TODO: :meow() metodunu belirtilen sayıda çağır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi