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
endArtı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.
Görev
KolayAkı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ıylaThermostatsınıfınızı tanımlayın. Her termostat mevcuttemperaturedeğerini takip etmelidir. Şunları ekleyin:- Sıcaklığı
:new()(konforlu bir varsayılan değer) olarak başlatan bir20yapı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: minimum10ve maksimum30
- Sıcaklığı
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
10değerinin altındaysa, onu10olarak ayarlayın - Yeni sıcaklık
30değerinin üzerindeyse, onu30olarak ayarlayın - Aksi durumda, 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:
- İlk sıcaklığı 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 (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
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
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şisiKendi başına pratik yap: Online Lua derleyicisi