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
endArtı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.
Görev
KolaySı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 kullanarakThermostatsınıfınızı tanımlayın. Her termostat mevcuttemperaturedeğ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): minimum10ve maksimum30
- Sıcaklığı
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
10değerinin altındaysa,10olarak ayarlayın - Eğer yeni sıcaklık
30değerinin üzerindeyse,30olarak ayarlayın - Aksi takdirde, istenen değere ayarlayın
İki girdi alacaksınız:
- Ayarlanacak ilk sıcaklık
- Ayarlanacak ikinci sıcaklık
Ana dosyanızda bir termostat oluşturun, ardından:
- Başlangıç sıcaklığını yazdırın
- Sıcaklığı ilk girdi değerine ayarlayın ve sonucu yazdırın
- 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
30Sı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
endDoğ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
endGetter (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
endSetter'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
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
1'Self' Kavramı
Fonksiyonlu TablolarAçık 'self'İki Nokta SözdizimiNokta vs İki NoktaÖzet - Hareket Eden Nokta4Proje: Dijital Banka
Proje KurulumuPara Yatırma Metodu7Çok Biçimlilik ve Geçersiz Kılma
Metotları Geçersiz KılmaÜst Sınıf Metotlarını ÇağırmaDuck TypingOrtak ArayüzTür KontrolüÖzet - Çalışan Rolleri2Sınıf Prototip Kalıbı
Prototip Kavramı__index ile Bağlama:new() KurucusuÖznitelikleri BaşlatmaBağımsız ÖrneklerÖzet - Araba Fabrikası5OOP'de Operatör Aşırı Yükleme
Nesneleri ToplamaNesneleri ÇıkarmaNesneleri BirleştirmeNesneleri Karşılaştırma (<, >)Özet - Cüzdan Matematiği8Kapsülleme
Adlandırma KurallarıGizlilik için Closure'larClosure'lar Aracılığıyla ErişimSalt Okunur TablolarDoğrulama MantığıÖzet - Güvenli Kasa11Tasarım Kalıpları (Lite)
Fabrika FonksiyonlarıSingleton TablosuIterator KalıbıObserver (Dinleyici)Özet - Logger Fabrikası3Nesne Durumu ve Davranışı
Örnek DeğişkenleriGetter MetotlarıSetter MetotlarıHesaplanmış ÖzelliklerString BiçimlendirmeEşitlik KontrolleriÖzet - Öğrenci Notu6Kalıtımın Temelleri
Kalıtım KurulumuMetot KalıtımıConstructor'ı GenişletmeAlt Sınıf Metotları EklemePaylaşılan ve BenzersizÖzet - Şekil Hiyerarşisi