Menu
Coddy logo textTech

Öznitelikleri Başlatma

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 9 / 70.

Öğrendiğiniz :new() yapıcısı nesneler oluşturur, ancak her örnek aynı şekilde başlar. Gerçek nesnelerin benzersiz verilere ihtiyacı vardır: bir kişinin belirli bir adı, bir oyuncunun başlangıç puanı vardır. Nesneleri kullanışlı hâle getirmek için yapıcı, bağımsız değişkenleri kabul etmeli ve bunları yeni örneğe atamalıdır.

Yapıcının başlangıç değerlerini kabul etmesini şu şekilde genişletebilirsin:

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

Yapıcı artık parametre olarak name ve breed alıyor. Boş örneği oluşturup metatablosunu ayarladıktan sonra, bu değerleri doğrudan örneğin alanlarına atıyoruz. Oluşturulan her nesnenin kendine ait name ve breed değerleri olacak.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- Çıktı: I am Rex, a German Shepherd
dog2:introduce()  -- Çıktı: I am Bella, a Poodle

Her iki köpek de prototipten aynı :introduce() yöntemini paylaşır, ancak her birinin örnek tablosunda depolanan kendine özgü bir adı ve ırkı vardır. Prototipleri parametreleştirilmiş oluşturucularla birleştirmenin gücü budur: bireysel durumla paylaşılan davranış.

challenge icon

Görev

Kolay

Kendi adları ve yaşları olan benzersiz kişiler oluşturan bir Person sınıfı oluşturalım. Uygun modül yapısını uygulamak için kodunuzu iki dosyaya ayıracaksınız.

Şunları oluşturacaksınız:

  • Person.lua: Bir ad ve yaş kabul eden bir oluşturucu ile Person sınıfınızı tanımlayın. Her kişinin kendini tanıtmasını sağlayan bir :introduce() yöntemi ekleyin.
  • main.lua: Person modülünü içe aktarın ve sağlanan girdileri kullanarak bir kişi örneği oluşturun. Ardından bu kişinin kendini tanıtmasını sağlayın.

:new(name, age) oluşturucunuz her iki değeri de kabul etmeli ve bunları yeni örnekte saklamalıdır. :introduce() yöntemi tam olarak şu biçimde yazdırmalıdır:

Hello, my name is [name] and I am [age] years old

İki girdi alacaksınız:

  1. Kişinin adı
  2. Kişinin yaşı

Örneğin girdiler Alice ve 25 ise çıktı şu şekilde olmalıdır:

Hello, my name is Alice and I am 25 years old

Kendin dene

-- Person modülünü yükle
local Person = require('Person')

-- Girdiyi oku
local name = io.read()
local age = io.read()

-- TODO: Person:new(name, age) kullanarak yeni bir Person örneği oluştur

-- TODO: person örneğiniz üzerinde introduce() metodunu ç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