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 6Temel 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.
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:xveybileş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__addmetamethod'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:
- İlk vektörün x bileşeni
- İlk vektörün y bileşeni
- İkinci vektörün x bileşeni
- İ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: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
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
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil HiyerarşisiKendi başına pratik yap: Online Lua derleyicisi