Menu
CoddyTech

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 yanı sıra, karşılaştırma metamethod'larını kullanarak nesnelerin birbirleriyle nasıl karşılaştırılacağını da tanımlayabilirsiniz. __lt metamethod'u "küçüktür" (<) operatörünü işler.

Lua a < b ifadesini değerlendirdiğinde, metatabloda __lt öğesini arar. Bu metamethod, karşılaştırma mantığınıza bağlı olarak 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ırabilirsiniz:

local apple = Item:new("Apple", 2)
local laptop = Item:new("Laptop", 999)
print(apple < laptop)   -- Çıktı: true
print(laptop < apple)   -- Çıktı: false

İşte akıllıca kısım: Lua, > operatörünü __lt üzerinden 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ımlayarak her iki karşılaştırma yönüne de ücretsiz sahip olursunuz.

challenge icon

Görev

Kolay

Fiyata göre < ve > operatörleri kullanılarak karşılaştırılabilen bir Product sınıfı oluşturalım. Bu, alışveriş sepetindeki ürünleri sıralamak veya bir listedeki en ucuz seçeneği bulmak gibi senaryolar için idealdir.

Kodunuzu iki dosya arasında düzenleyeceksiniz:

  • Product.lua: name ve price alanları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 __lt metamethod’unu uygulayın. __lt tanımlamanın > operatörünü de otomatik olarak sağladığını unutmayın: Lua bunu sizin için halleder!
  • main.lua: Product modülünü require edin, 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:

  1. İlk ürünün adı
  2. İlk ürünün fiyatı
  3. İkinci ürünün adı
  4. İ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:

  1. İlk ürün ikinciden daha mı ucuz? (true veya false yazdırın)
  2. İlk ürün ikinciden daha mı pahalı? (true veya false yazdırın)
  3. Daha ucuz olan ürünün adını yazdırın

Örneğin girdiler Apple, 2, Laptop ve 999 ise çıktı şu şekilde olmalıdır:

true
false
Apple

Apple’ın (fiyatı 2) fiyatı Laptop’tan (fiyatı 999) daha düşük olduğundan ilk karşılaştırmanın sonucu true olur. Apple, Laptop’tan daha pahalı olmadığı için ikinci sonuç false olur. Apple’ın fiyatı daha düşük olduğundan, daha ucuz ürün olarak yazdırılır.

Kendin dene

-- Product modülünü gerektir
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ü kullanarak karşılaştır ve true/false yazdır

-- TODO: Ürünleri > operatörü kullanarak karşılaştır ve true/false yazdır

-- TODO: Daha ucuz ürünün adını 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