Setter Metotları
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama 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!
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.
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şisi