Menu
Coddy logo textTech

Nesneleri Toplama

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

__tostring ve __eq gibi metamethod'ların nesnelerin davranışını özelleştirmenize nasıl olanak tanıdığını zaten gördünüz. Şimdi bunu aritmetik işlemlere, toplama ile başlayarak genişleteceğiz.

__add metametodu, iki nesne arasında + operatörünü kullandığınızda ne olacağını tanımlar. Lua, a + b ifadesini gördüğünde, işlenenlerden herhangi birinin metatablosunda __add arar.

local Vector = {}
Vector.__index = Vector

function Vector:new(x, y)
    local obj = {x = x, y = y}
    setmetatable(obj, Vector)
    return obj
end

function Vector.__add(v1, v2)
    return Vector:new(v1.x + v2.x, v1.y + v2.y)
end

__add öğesinin iki nokta üst üste ile değil, nokta ile tanımlandığına dikkat edin. Her iki işleneni de bağımsız değişken olarak alır ve özgünlerden herhangi birini değiştirmek yerine yeni bir nesne döndürmelidir. Bu, işlemin öngörülebilir ve güvenli kalmasını sağlar.

local a = Vector:new(3, 4)
local b = Vector:new(1, 2)
local c = a + b

print(c.x, c.y)  -- Çıktı: 4  6

Temel içgörü, __add öğesinin yalnızca nesnede değil, metatablonun kendisinde (burada Vector) bulunması gerektiğidir. Vector öğesini tüm örneklerin metatablosu olarak ayarladığımız için hepsi bu davranışı otomatik olarak paylaşır.

challenge icon

Görev

Kolay

+ operatörünü kullanarak toplamayı destekleyen bir Vector sınıfı oluşturalım. Bu, operatör aşırı yüklemesine attığın ilk adım; nesnelerinin Lua'nın yerleşik operatörleriyle doğal bir şekilde çalışmasını sağlayacak.

Kodunu iki dosyaya ayıracaksın:

  • Vector.lua: x ve y bileşenlerine sahip Vector sınıfını tanımla. Bir :new(x, y) kurucusu ekle ve iki vektörün toplanmasının birleştirilmiş bileşenlere sahip yeni bir vektör oluşturması için __add metamethod'unu uygula. __add'in nokta söz dizimini (iki nokta üst üste değil) kullandığını ve her iki işleneni bağımsız değişken olarak aldığını unutma.
  • main.lua: Vector modülünü içe aktar, vektör örnekleri oluştur ve bunların toplanmasının doğru sonucu ürettiğini göster.

Dört girdi alacaksın:

  1. İlk vektörün x bileşeni
  2. İlk vektörün y bileşeni
  3. İkinci vektörün x bileşeni
  4. İkinci vektörün y bileşeni

Ana dosyanda verilen bileşenlerle iki vektör oluştur, bunları + operatörünü kullanarak topla ve elde edilen vektörün x ve y değerlerini ayrı satırlarda yazdır.

Örneğin girdiler 3, 4, 1, 2 ise çıktı şu şekilde olmalıdır:

4
6

İlk vektör (3, 4) ile ikinci vektörün (1, 2) toplamı yeni bir vektöre (4, 6) eşittir.

REQUIRED OUTPUT FORMAT: [Çevrilmiş içeriğiniz burada]

Kendin dene

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

-- Girdiyi oku
local x1 = tonumber(io.read())
local y1 = tonumber(io.read())
local x2 = tonumber(io.read())
local y2 = tonumber(io.read())

-- TODO: Girdi değerlerini kullanarak iki Vector örneği oluştur

-- TODO: + operatörünü kullanarak iki vektörü topla

-- TODO: Sonuç vektörünün x ve y değerlerini ayrı satırlarda yazdı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