Nesneleri Çıkarma
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 27 / 70.
__add + operatörünü ele aldığı gibi, __sub metametodu da - operatörünün davranışını tanımlar. Kalıp aynıdır. İki işlenen alan ve yeni bir nesne döndüren bir fonksiyon tanımlarsın.
local Color = {}
Color.__index = Color
function Color:new(r, g, b)
local obj = {r = r, g = g, b = b}
setmetatable(obj, Color)
return obj
end
function Color.__sub(c1, c2)
return Color:new(c1.r - c2.r, c1.g - c2.g, c1.b - c2.b)
endRGB renkleriyle çalışırken çıkarma işlemi negatif değerler üretebilir. Gerçek uygulamalarda sonuçları geçerli aralıklara (0-255) sıkıştırmak isteyebilirsiniz, ancak temel metamethod yapısı aynı kalır.
local bright = Color:new(200, 150, 100)
local dim = Color:new(50, 30, 20)
local result = bright - dim
print(result.r, result.g, result.b) -- Çıktı: 150 120 80Unutma: __sub öğesini noktayla (iki noktayla değil) tanımla; çünkü bu, Lua’nın her iki işleneni de bağımsız değişken olarak doğrudan çağırdığı bir metamethod’dur.
Görev
KolayColor operatörünü kullanarak çıkarma işlemini destekleyen bir - sınıfı oluşturalım. Renkler RGB değerleriyle temsil edilir ve bir renkten başka bir rengin çıkarılması, her bileşenin farkını içeren yeni bir renk oluşturur.
Kodunuzu iki dosyaya ayıracaksınız:
Color.lua: Kırmızı, yeşil ve mavi değerlerini temsil edenr,gvebbileşenleriyle Color sınıfınızı tanımlayın. Bir:new(r, g, b)yapıcısı ekleyin ve iki rengin çıkarılmasının bileşen bazındaki farkları içeren yeni bir renk oluşturması için__submetamethod'unu uygulayın.__sub'un nokta söz dizimini kullandığını ve her iki işleneni de bağımsız değişken olarak aldığını unutmayın.main.lua: Color modülünü içe aktarın, sağlanan girdilerden renk örnekleri oluşturun, bunları çıkarın ve elde edilen RGB değerlerini görüntüleyin.
Altı girdi alacaksınız:
- İlk rengin kırmızı bileşeni
- İlk rengin yeşil bileşeni
- İlk rengin mavi bileşeni
- İkinci rengin kırmızı bileşeni
- İkinci rengin yeşil bileşeni
- İkinci rengin mavi bileşeni
Ana dosyanızda, verilen RGB değerleriyle iki renk oluşturun, - operatörünü kullanarak ikinci rengi ilk renkten çıkarın ve elde edilen rengin r, g ve b değerlerini ayrı satırlarda yazdırın.
Örneğin girdiler 200, 150, 100, 50, 30, 20 ise çıktı şöyle olmalıdır:
150
120
80İlk renk (200, 150, 100) eksi ikinci renk (50, 30, 20), yeni bir renge (150, 120, 80) eşittir.
Kendin dene
-- Color modülünü yükle
local Color = require('Color')
-- Girdi değerlerini oku
local r1 = tonumber(io.read())
local g1 = tonumber(io.read())
local b1 = tonumber(io.read())
local r2 = tonumber(io.read())
local g2 = tonumber(io.read())
local b2 = tonumber(io.read())
-- TODO: Verilen RGB değerleriyle iki Color örneği oluştur
-- TODO: - operatörünü kullanarak ikinci rengi birinciden çıkar
-- TODO: Sonuç rengin r, g ve b 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