Menu
Coddy logo textTech

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)
end

RGB 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  80

Unutma: __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.

challenge icon

Görev

Kolay

Color 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 eden r, g ve b bileş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 __sub metamethod'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:

  1. İlk rengin kırmızı bileşeni
  2. İlk rengin yeşil bileşeni
  3. İlk rengin mavi bileşeni
  4. İkinci rengin kırmızı bileşeni
  5. İkinci rengin yeşil bileşeni
  6. İ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
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