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 metametotların nesnelerin davranışını özelleştirmenizi sağladığını zaten gördünüz. Şimdi bunu aritmetik işlemlere genişleteceğiz; toplama ile başlayalım.
__add metayöntemi, iki nesne arasında + operatörünü kullandığında ne olacağını tanımlar. Lua, a + b ifadesini gördüğünde, her iki işlenenden birinin metatablosunda __add olup olmadığına bakar.
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 işlevinin nokta ile tanımlandığına dikkat et. Lua, her iki işleneni de sıradan argümanlar olarak iletir ve noktalı biçim her ikisini de adlandırır. İki nokta da kullanılabilir; çünkü function Vector:__add(other), function Vector.__add(self, other) ile aynıdır, ancak noktalı biçim gelenektir. __add, orijinal nesnelerden herhangi birini değiştirmek yerine yeni bir nesne döndürmelidir. Bu, işlemi öngörülebilir ve güvenli kı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 fikir, __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+ işleçini kullanarak toplama işlemini destekleyen bir Vector sınıfı oluşturalım. Bu, işleç aşırı yüklemeye attığın ilk adım; nesnelerinin Lua'nın yerleşik işleçleriyle doğal biçimde ç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, bileşenlerinin toplamını içeren yeni bir vektör oluşturması için__addmetamethod'unu uygula. Her iki işlenenin de adlandırılmış argümanlar olarak iletilmesi için__add'i nokta sözdizimiyle tanımla.main.lua: Vector modülünü içe aktar, vektör örnekleri oluştur ve bunları toplamanın doğru sonucu verdiğ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, + işleçini kullanarak bunları topla ve sonuç vektörünün x ve y değerlerini ayrı satırlara yazdır.
Örneğin, girdiler 3, 4, 1, 2 ise çıktı şöyle 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.
Kendin dene
-- Vector modülünü require ile 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: İki vektörü + operatörünü kullanarak topla
-- TODO: Elde edilen vektörün x ve y değerlerini ayrı satırlara 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