Menu
Coddy logo textTech

Öznitelikleri Başlatma

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 9 / 70.

Öğrendiğiniz :new() kurucusu nesneler oluşturur, ancak her örnek özdeş olarak 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ı hale getirmek için, kurucunun bağımsız değişkenleri kabul etmesi ve bunları yeni örneğe ataması gerekir.

Constructor'ı başlangıç değerlerini kabul edecek şekilde şu şekilde genişletebilirsiniz:

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ı (constructor) artık parametre olarak name ve breed alır. Boş örneği oluşturduktan ve metatablosunu (metatable) ayarladıktan sonra, bu değerleri doğrudan örneğin alanlarına atarız. Oluşturulan her nesne kendi name ve breed alanına sahip olacaktır.

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

dog1:introduce()  -- Çıktı: Ben Rex, bir Alman Çoban Köpeğiyim
dog2:introduce()  -- Çıktı: Ben Bella, bir Kaniş

Her iki köpek de prototipten gelen aynı :introduce() metodunu paylaşır, ancak her birinin kendi örnek tablosunda saklanan kendine özgü adı ve cinsi vardır. Bu, prototipleri parametreli yapıcılarla birleştirmenin gücüdür—bireysel durum ile paylaşılan davranış.

challenge icon

Görev

Kolay

Kendi adları ve yaşları olan benzersiz bireyler oluşturan bir Person 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:

  • Person.lua: Bir isim ve yaş kabul eden bir yapıcı (constructor) ile Person sınıfınızı tanımlayın. Her kişinin kendisini tanıtmasını sağlayan bir :introduce() metodu ekleyin.
  • main.lua: Person modülünüzü dahil edin (require) ve sağlanan girdileri kullanarak bir kişi örneği (instance) oluşturun. Ardından kendilerini tanıtmalarını sağlayın.

:new(name, age) yapıcınız her iki değeri de kabul etmeli ve bunları yeni örnek (instance) üzerinde saklamalıdır. :introduce() metodu tam olarak şu formatta çıktı vermelidir:

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

Kopya kağıdı

Benzersiz verilere sahip nesneler oluşturmak için, parametreleri kabul edecek ve bunları örneğe (instance) atayacak şekilde :new() yapısını genişletin:

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

Farklı değerlerle örnekler (instances) oluşturun:

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 nesne, prototipten gelen metotları paylaşırken, kendi örnek tablosunda (instance table) saklanan kendine özgü verilere sahiptir.

Kendin dene

-- Person modülünü dahil et
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şturun

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