Menu
Coddy logo textTech

Örnek Değişkenleri

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

Nesnelerin kendi iç verilerini nasıl yönettiğine odaklanan yeni bir bölüme hoş geldin. Sınıflar ve örnekler oluşturmayı öğrendin: şimdi her örneğin kendine özgü durumunu nasıl depoladığını ve yönettiğini keşfetme zamanı.

Örnek değişkenleri, yalnızca tek bir nesneye ait olan alanlardır. Bir yöntem veya oluşturucu içinde self.something ifadesine bir değer atadığında, bu veri yalnızca o belirli örnekte bulunur. Aynı sınıftaki diğer nesnelerin kendilerine ait ayrı kopyaları vardır.

Bu, tablolar gibi karmaşık verileri depolarken özellikle önemli hâle gelir. Her karakterin farklı öğeler taşıdığı bir envanter sistemini ele alalım:

local Inventory = {}
Inventory.__index = Inventory

function Inventory:new()
    local instance = {}
    setmetatable(instance, self)
    instance.items = {}  -- Her örnek kendi boş tablosunu alır
    return instance
end

function Inventory:addItem(item)
    table.insert(self.items, item)
end

Temel satır instance.items = {} satırıdır. Yapıcı içinde yeni ve boş bir tablo oluşturarak her envanter nesnesinin kendine ait ayrı bir liste almasını sağlarsın. Bunun yerine items öğesini sınıf tablosunun kendisinde tanımlasaydın, tüm örnekler yanlışlıkla aynı tabloyu paylaşırdı: bir karaktere kılıç eklemek onu herkese verirdi!

local bag1 = Inventory:new()
local bag2 = Inventory:new()

bag1:addItem("Sword")
bag2:addItem("Potion")

print(#bag1.items)  -- Çıktı: 1
print(#bag2.items)  -- Çıktı: 1

Her envanter kendi koleksiyonunu korur. Bu örüntü, bir örneğin bağımsız olarak değişen verileri izlemesi gerektiğinde geçerlidir: listeler, sayaçlar veya o nesneye özgü herhangi bir değiştirilebilir durum.

challenge icon

Görev

Kolay

Her cart kendi ayrı ürün listesini koruyacak bir ShoppingCart sistemi oluşturalım. Bu, instance değişkenlerinin verileri nesneler arasında nasıl yalıttığını gösterecek: bir cart'a items eklemek diğerini etkilemeyecek!

Code'unuzu iki dosya arasında düzenleyeceksiniz:

  • ShoppingCart.lua: Her instance'ın kendi products tablosuna sahip olduğu ShoppingCart class'ını tanımlayın. Şunları ekleyin:
    • Her cart için empty bir products listesi başlatan :new() constructor'ı
    • Bu cart'ın listesine bir product ekleyen :addProduct(productName) method'u
    • Her product'ı ayrı bir satıra yazdıran :listProducts() method'u
  • main.lua: ShoppingCart module'ünü require edin ve iki ayrı cart oluşturun. Bağımsız inventory'lerini koruduklarını kanıtlamak için her cart'a farklı products ekleyin.

Dört inputs alacaksınız:

  1. cart A'ya eklenecek ilk product
  2. cart A'ya eklenecek ikinci product
  3. cart B'ye eklenecek ilk product
  4. cart B'ye eklenecek ikinci product

main dosyanızda:

  1. İki shopping cart oluşturun: cartA ve cartB
  2. İlk iki product'ı cartA'ya ekleyin
  3. Son iki product'ı cartB'ye ekleyin
  4. Cart A: yazdırın, ardından cart A'nın products listesini yazdırın
  5. Cart B: yazdırın, ardından cart B'nin products listesini yazdırın

Örneğin inputs Apple, Bread, Milk ve Eggs ise output şöyle olmalıdır:

Cart A:
Apple
Bread
Cart B:
Milk
Eggs

Unutmayın: önemli nokta, constructor içinde products değerini yeni bir empty tablo olarak başlatmaktır. Bu, tüm cart'lar arasında tek bir tabloyu paylaşmak yerine her cart instance'ının kendine ait ayrı bir liste almasını sağlar.

Kendin dene

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

-- Girdileri oku
local product1 = io.read()
local product2 = io.read()
local product3 = io.read()
local product4 = io.read()

-- TODO: İki alışveriş sepeti oluştur: cartA ve cartB

-- TODO: product1 ve product2'yi cartA'ya ekle

-- TODO: product3 ve product4'ü cartB'ye ekle

-- TODO: "Cart A:" yazdır, ardından cartA'nın ürünlerini listele

-- TODO: "Cart B:" yazdır, ardından cartB'nin ürünlerini listele
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