Menu
Coddy logo textTech

Setter Metotları

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

Getter metotları, dahili verileri kontrollü bir erişim noktası aracılığıyla okumanıza olanak tanır. Setter metotları (mutatör metotlar olarak da adlandırılır) ise tam tersini yapar; dahili durumu değiştirmek için kontrollü bir yol sağlarlar.

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

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ünebilir. Ancak daha sonra kurallar eklemeniz gerektiğinde ayarlayıcılar (setters) güçlü hale gelir. Hızın asla negatif olmadığını veya bir maksimum değeri aşmadığını garanti etmek istediğinizi hayal edin:

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çer. :setSpeed() kullanan herhangi bir kod, 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ımı daha kolay hale getirirler.

challenge icon

Görev

Kolay

Sıcaklığı akıllı bir şekilde kontrol etmek için ayarlayıcı (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 limitler uygulayacak ve sıcaklığı konforlu bir aralıkta tutacaktır.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • Thermostat.lua: Standart prototip desenini kullanarak Thermostat sınıfınızı tanımlayın. Her termostat mevcut temperature değerini takip etmelidir. Şunları içermelidir:
    • Sıcaklığı 20 (konforlu bir varsayılan) değerine başlatan bir :new() yapıcı metodu (constructor)
    • Mevcut sıcaklığı döndüren bir :getTemperature() okuyucu metodu (getter)
    • Sıcaklığı güncelleyen ancak sınırları koruyan bir :setTemperature(newTemp) ayarlayıcı metodu (setter): minimum 10 ve maksimum 30
  • main.lua: Thermostat modülünüzü dahil edin (require) ve bir termostat örneği oluşturun. Farklı sıcaklık değişikliklerini denemek ve limitlerin nasıl uygulandığını gözlemlemek için ayarlayıcıyı kullanın.

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

  • Eğer yeni sıcaklık 10 değerinin altındaysa, 10 olarak ayarlayın
  • Eğer yeni sıcaklık 30 değerinin üzerindeyse, 30 olarak ayarlayın
  • Aksi takdirde, 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. Başlangıç sıcaklığını 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 (sadece sayı olarak).

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

20
25
30

Sıcaklığı 50 olarak ayarlamaya yönelik ikinci girişimin nasıl 30 ile sonuçlandığına dikkat edin; ayarlayıcı (setter) maksimum limiti otomatik olarak uygular!

Kopya kağıdı

Setter (ayarlayıcı) metotları, iç durumu değiştirmek için kontrollü bir yol sunarak doğrulama kuralları ve kısıtlamalar eklemenize olanak tanır.

Temel setter metodu sözdizimi:

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

Doğrulama içeren setter'lar, veri değiştiğinde kuralları zorunlu kılar:

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

Getter (getirici) ve setter metotlarını birleştirmek, nesne özelliklerine kontrollü erişim sağlar:

local Car = {}
Car.__index = Car

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

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

function Car:getSpeed()
    return self.speed
end

Setter'lar, veri modifikasyonu için tek bir kontrol noktası oluşturarak nesneleri daha güvenli ve bakımı daha kolay hale getirir. Setter'ı kullanan herhangi bir kod, herhangi bir değişikliğe gerek kalmadan doğrulama mantığından otomatik olarak yararlanır.

Kendin dene

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

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

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

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

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

-- YAPILACAK: 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.

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