Menu
Coddy logo textTech

: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.

challenge icon

Görev

Kolay

Yeni öğ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 ile Cat sınıfınızı tanımlayın. Sınıfınız şunları içermelidir:
    • Kendisine işaret eden __index ile 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
    Dosyanın sonunda sınıf tablosunu döndürün.
  • 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
quiz iconKendini test et

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