:new() Kurucusu
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 8 / 70.
Nesneleri manuel olarak oluşturmak—boş bir tablo yapmak, metatablosunu ayarlamak, __index'i bağlamak—tekrarlayıcı hale gelir. Standart çözüm, tüm bunları sizin yerinize halleden bir :new() yapıcı (constructor) metodunu doğrudan sınıfın içinde 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çerisinde neler olduğunu adım adım inceleyelim. İlk olarak, instance adında boş bir tablo oluşturuyoruz. Ardından, metatablosunu self olarak ayarlıyoruz—ki bu, Dog:new() fonksiyonunu çağırdığımızda Dog olur.
Dog.__index, Dog'un kendisini işaret ettiği için, örnek Dog içinde tanımlanan tüm metotları bulabilir. Son olarak, yeni nesneyi döndürürüz.
Yapıcı metodun (constructor) 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 nesne oluşturmak temiz ve tutarlıdır:
local myDog = Dog:new()
myDog:bark() -- Çıktı: Woof!Oluşturduğunuz her sınıf bu aynı yapıyı takip edecektir. :new() kurucusu, nesne oluşturmanın gerçekleştiği tek yer haline gelerek kodunuzu düzenli ve öngörülebilir kılar.
Görev
KolayYeni öğrendiğiniz standart yapıcı (constructor) desenini kullanarak bir Cat sınıfı oluşturalım. Uygun modül yapısını uygulamak için kodunuzu iki dosya halinde düzenleyeceksiniz.
Şunları oluşturacaksınız:
Cat.lua: Tam yapıcı deseni ileCatsınıfınızı tanımlayın. Sınıfınız şunları içermelidir:- Kendisine işaret eden
__indexile sınıf tablosu - Bir örnek (instance) oluşturan, metatablosunu ayarlayan ve onu döndüren bir
:new()yapıcısı - Kedinin sesini yazdıran bir
:meow()metodu
- Kendisine işaret eden
main.lua: Cat modülünüzü dahil edin (require) ve bir kedi örneği oluşturmak için yapıcıyı kullanın. Ardından, her şeyin doğru şekilde bağlandığını doğrulamak için metodunu çağırın.
Bir girdi alacaksınız: kedinizin kaç kez miyavlaması gerektiği.
:meow() metodunuz tam olarak şunu yazdırmalıdır:
Meow!Ana dosyanızda, Cat:new() kullanarak bir kedi oluşturun ve belirtilen sayıda :meow() metodunu çağırın.
Örneğin, girdi 3 ise, çıktı şöyle olmalıdır:
Meow!
Meow!
Meow!Kopya kağıdı
Lua'da yapıcıya (constructor) sahip bir sınıf oluşturmak için, örnekler (instances) oluşturan bir :new() metodu tanımlayın:
local ClassName = {}
ClassName.__index = ClassName
function ClassName:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function ClassName:method()
-- metod uygulaması
end__index alanı sınıfın kendisine işaret eder ve örneklerin sınıf tablosunda tanımlanan metodlara erişmesine olanak tanır.
:new() içinde:
- Örnek için boş bir tablo oluşturun
- Metatablosunu
self(sınıf) olarak ayarlayın - Yeni örneği döndürün
Yapıcıyı kullanarak nesneler oluşturun:
local obj = ClassName:new()
obj:method()Kendin dene
-- Cat modülünü dahil edin
local Cat = require('Cat')
-- Girdiyi oku: miyavlama sayısı
local times = tonumber(io.read())
-- TODO: Cat:new() kullanarak bir kedi örneği oluşturun
-- TODO: :meow() metodunu belirtilen sayıda çağırın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Object Oriented Programming 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şisi