Menu
Coddy logo textTech

Setter Metotları

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 14 / 70.

Getter yöntemleri, dahili verileri kontrollü bir erişim noktası üzerinden okumanızı sağlar. Setter yöntemleri (mutator yöntemleri olarak da adlandırılır) bunun tersini yapar. Dahili durumu değiştirmenin kontrollü bir yolunu sağlarlar.

Doğrudan car.speed = 50 atamak yerine, car:setSpeed(50) çağrısını yaparsın:

local Car = {}
Car.__index = Car

function Car:new()
    local instance = {}
    setmetatable(instance, self)
    instance.speed = 0
    return instance
end

function Car:setSpeed(newSpeed)
    self.speed = newSpeed
end

function Car:getSpeed()
    return self.speed
end

İlk bakışta bu, aynı sonuç için fazladan iş gibi görünüyor. Ancak ayarlayıcılar, daha sonra kurallar eklemeniz gerektiğinde güçlü hâle gelir. Hızın hiçbir zaman negatif olmamasını veya bir üst sınırı aşmamasını sağlamak istediğinizi düşünün:

function Car:setSpeed(newSpeed)
    if newSpeed < 0 then
        self.speed = 0
    elseif newSpeed > 200 then
        self.speed = 200
    else
        self.speed = newSpeed
    end
end

Artık her hız değişikliği doğrulama mantığınızdan geçiyor. :setSpeed() kullanan tüm kodlar, herhangi bir değişiklik yapılmadan bu kontrollerden otomatik olarak yararlanır. Setter’ların gerçek değeri budur. Verilerin nasıl değiştiğini kontrol ettiğiniz tek bir nokta oluşturarak nesnelerinizi daha güvenli ve bakımlarını daha kolay hâle getirirler.

challenge icon

Görev

Kolay

Akıllı bir şekilde sıcaklığı kontrol etmek için setter metotlarını kullanan bir Thermostat sınıfı oluşturalım. Herhangi bir sıcaklık değerine izin vermek yerine termostatınız makul sınırları uygulayarak sıcaklığı konforlu bir aralıkta tutacak.

Kodunuzu iki dosyaya ayıracaksınız:

  • Thermostat.lua: Standart prototip kalıbıyla Thermostat sınıfınızı tanımlayın. Her termostat mevcut temperature değerini takip etmelidir. Şunları ekleyin:
    • Sıcaklığı :new() (konforlu bir varsayılan değer) olarak başlatan bir 20 yapıcısı
    • Mevcut sıcaklığı döndüren bir :getTemperature() getter metodu
    • Sıcaklığı güncelleyen, ancak sınırlar içinde tutan bir :setTemperature(newTemp) setter metodu: minimum 10 ve maksimum 30
  • main.lua: Thermostat modülünü require edin ve bir termostat örneği oluşturun. Farklı sıcaklık değişikliklerini denemek için setter'ı kullanın ve sınırların nasıl uygulandığını gözlemleyin.

:setTemperature() metodunuz şu kuralları uygulamalıdır:

  • Yeni sıcaklık 10 değerinin altındaysa, onu 10 olarak ayarlayın
  • Yeni sıcaklık 30 değerinin üzerindeyse, onu 30 olarak ayarlayın
  • Aksi durumda, istenen değere ayarlayın

İki girdi alacaksınız:

  1. Ayarlanacak ilk sıcaklık
  2. Ayarlanacak ikinci sıcaklık

Ana dosyanızda bir termostat oluşturun, ardından:

  1. İlk sıcaklığı yazdırın
  2. Sıcaklığı ilk girdi değerine ayarlayın ve sonucu yazdırın
  3. Sıcaklığı ikinci girdi değerine ayarlayın ve sonucu yazdırın

Her sıcaklığı kendi satırında yazdırın (yalnızca sayı).

Örneğin, girdiler 25 ve 50 ise çıktı şöyle olmalıdır:

20
25
30

İkinci 50 ayarlama girişiminin 30 ile sonuçlandığına dikkat edin: setter, maksimum sınırı otomatik olarak uygular!

Kendin dene

-- Thermostat modülünü yükle
local Thermostat = require('Thermostat')

-- Girdiyi oku
local temp1 = tonumber(io.read())
local temp2 = tonumber(io.read())

-- TODO: Bir termostat örneği oluştur

-- TODO: Başlangıç sıcaklığını yazdır

-- TODO: Sıcaklığı temp1 olarak ayarla ve sonucu yazdır

-- TODO: Sıcaklığı temp2 olarak ayarla ve sonucu 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