Menu
Coddy logo textTech

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

challenge icon

Görev

Kolay

Az ö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 deseniyle Cat sınıfını tanımla. Sınıfın şunları içermeli:
    • Kendisine işaret eden __index değ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
    Dosyanın sonunda sınıf tablosunu döndür.
  • 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
quiz iconKendini test et

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

Kendi başına pratik yap: Online Lua derleyicisi