Menu
Coddy logo textTech

Nesneleri Çıkarma

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 27 / 70.

Tıpkı __add'in + operatörünü işlemesi gibi, __sub metametodu - operatörü için davranışı tanımlar. Kalıp aynıdır; iki operand alan ve yeni bir nesne döndüren bir fonksiyon tanımlarsınız.

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ınırlamak isteyebilirsiniz, ancak temel metametot 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

Unutmayın: __sub metodunu nokta ile (iki nokta üst üste değil) tanımlayın, çünkü bu, Lua'nın her iki işleneni de argüman olarak kullanarak doğrudan çağırdığı bir metametottur.

challenge icon

Görev

Kolay

- operatörünü kullanarak çıkarmayı destekleyen bir Color sınıfı oluşturalım. Renkler RGB değerleriyle temsil edilir ve bir rengi diğerinden çıkarmak, her bir bileşenin farkıyla yeni bir renk oluşturur.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Color.lua: Kırmızı, yeşil ve mavi değerlerini temsil eden r, g ve b bileşenlerine sahip Color sınıfınızı tanımlayın. Bir :new(r, g, b) kurucusu ekleyin ve iki rengin çıkarılmasının bileşen bazlı farklarla yeni bir renk oluşturması için __sub metametodunu uygulayın. __sub metodunun nokta sözdizimini kullandığını ve her iki işleneni de argüman olarak aldığını unutmayın.
  • main.lua: Color modülünüzü dahil edin (require), sağlanan girdilerden renk örnekleri oluşturun, bunları birbirinden çıkarın ve sonuçta oluşan RGB değerlerini görüntüleyin.

Altı adet girdi alacaksınız:

  1. Birinci rengin kırmızı bileşeni
  2. Birinci rengin yeşil bileşeni
  3. Birinci 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 birinciden çıkarın ve sonuçta oluşan rengin r, g ve b değerlerini ayrı satırlara yazdırın.

Örneğin, girdiler 200, 150, 100, 50, 30, 20 ise çıktı şu şekilde olmalıdır:

150
120
80

Birinci renk (200, 150, 100) eksi ikinci renk (50, 30, 20), yeni bir renge (150, 120, 80) eşittir.

Kopya kağıdı

__sub metametodu, - operatörü için davranışı tanımlar. İki işlenen alır ve yeni bir nesne döndürür.

function Color.__sub(c1, c2)
    return Color:new(c1.r - c2.r, c1.g - c2.g, c1.b - c2.b)
end

__sub metodunu nokta ile tanımlayın (iki nokta üst üste değil), çünkü bu Lua'nın her iki işleneni de argüman olarak doğrudan çağırdığı bir metametoddur.

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

Kendin dene

-- Color modülünü dahil et
local Color = require('Color')

-- Giriş 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şturun

-- TODO: - operatörünü kullanarak ikinci rengi birinciden çıkarın

-- TODO: Sonuç renginin r, g ve b değerlerini ayrı satırlara yazdırın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler