Nesneleri Karşılaştırma (<, >)
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 29 / 70.
Aritmetik ve birleştirmenin ötesinde, karşılaştırma metametotlarını kullanarak nesnelerin birbirleriyle nasıl karşılaştırılacağını da tanımlayabilirsiniz. __lt metametodu, "küçüktür" (<code><) işleçini işler.
Lua a < b ifadesini değerlendirdiğinde, metatabloda __lt arar. Bu metamethod, karşılaştırma mantığınıza göre true veya false döndürmelidir.
local Item = {}
Item.__index = Item
function Item:new(name, price)
local obj = {name = name, price = price}
setmetatable(obj, Item)
return obj
end
function Item.__lt(a, b)
return a.price < b.price
end__lt tanımlandığında artık öğeleri doğrudan karşılaştırabilirsin:
local apple = Item:new("Apple", 2)
local laptop = Item:new("Laptop", 999)
print(apple < laptop) -- Çıktı: true
print(laptop < apple) -- Çıktı: falseİşte zekice olan kısım: Lua, operatörünü __lt öğesinden otomatik olarak türetir. a > b yazdığınızda Lua bunun yerine yalnızca b < a ifadesini değerlendirir. Böylece yalnızca __lt tanımlamak, her iki karşılaştırma yönünü de size ücretsiz olarak sunar.
Görev
KolayFiyata göre Product ve <code>< operatörleri kullanılarak karşılaştırılabilen bir sınıfı oluşturalım. Bu, alışveriş sepetindeki ürünleri sıralamak veya bir listedeki en ucuz seçeneği bulmak gibi durumlar için idealdir.
Kodunuzu iki dosyaya ayıracaksınız:
Product.lua:namevepricealanlarına sahip Product sınıfınızı tanımlayın. Bir:new(name, price)yapıcısı ekleyin ve ürünleri fiyatlarına göre karşılaştırmak için__ltmetamethod'unu uygulayın.__lttanımlamanın size otomatik olarakoperatörünü de sağladığını unutmayın: Bunu Lua sizin için halleder!main.lua: Product modülünü içe aktarın, girdilerden ürün örnekleri oluşturun ve hangisinin daha pahalı veya daha ucuz olduğunu belirlemek için bunları karşılaştırın.
Dört girdi alacaksınız:
- İlk ürünün adı
- İlk ürünün fiyatı
- İkinci ürünün adı
- İkinci ürünün fiyatı
Ana dosyanızda, verilen ad ve fiyatlarla iki ürün oluşturun. Ardından üç karşılaştırma yapın ve her birinin sonucunu ayrı bir satırda yazdırın:
- İlk ürün ikinciden daha mı ucuz? (
trueveyafalseyazdırın) - İlk ürün ikinciden daha mı pahalı? (
trueveyafalseyazdırın) - Ucuz olan ürünün adını yazdırın
Örneğin girdiler Apple, 2, Laptop ve 999 ise çıktı şöyle olmalıdır:
true
false
AppleApple (fiyatı 2), Laptop'tan (fiyatı 999) daha ucuzdur; bu nedenle ilk karşılaştırmanın sonucu true olur. Apple, Laptop'tan daha pahalı değildir; bu nedenle ikincinin sonucu false olur. Apple'ın fiyatı daha düşük olduğundan, ucuz ürün olarak yazdırılır.
Kendin dene
-- Product modülünü yükle
local Product = require('Product')
-- Girdileri oku
local name1 = io.read()
local price1 = tonumber(io.read())
local name2 = io.read()
local price2 = tonumber(io.read())
-- TODO: Product:new() kullanarak iki Product örneği oluştur
-- TODO: Ürünleri < operatörü ile karşılaştır ve true/false yazdır
-- TODO: Ürünleri > operatörü ile karşılaştır ve true/false yazdır
-- TODO: Daha ucuz ürünün adını 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