Getter Metotları
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 70.
self.health veya self.items gibi örnek değişkenlerde veri depolamayı öğrendin. Bu alanlara nesnenin dışından doğrudan erişebilsen de daha temiz bir yaklaşım vardır: getter yöntemlerini kullanmak.
Getter (erişimci yöntemi olarak da adlandırılır), dahili bir değer döndüren basit bir yöntemdir. player.health değerine doğrudan erişmek yerine player:getHealth() çağrısını yaparsın:
local Player = {}
Player.__index = Player
function Player:new(name)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.health = 100
return instance
end
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endNeden fazladan bir yöntemle uğraşalım? Getter'lar verilerinize kontrollü bir erişim noktası sağlar.
Şu anda :getHealth() yalnızca değeri döndürür. Ancak ileride mantık eklemek isteyebilirsin: örneğin sağlık 10'un altına düşerse "Critical" döndürmek veya sağlık her kontrol edildiğinde günlük kaydı tutmak.
Bir getter kullanıma hazır olduğunda, nesneyi kullanan herhangi bir kodu değiştirmeden bu değişiklikleri yapabilirsiniz.
local hero = Player:new("Luna")
print(hero:getHealth()) -- Çıktı: 100
print(hero:getName()) -- Çıktı: LunaBu desen, bir nesnenin iç yapısı ile diğer kodların onunla nasıl etkileşim kurduğu arasında net bir sınır oluşturur. Dış dünya, nesnenin alanlarına doğrudan erişmek yerine verileri metotlar aracılığıyla ister.
Görev
Kolayİç verilerine erişmek için getter yöntemlerini kullanan bir Player sınıfı oluşturalım. Oyuncunun alanlarına doğrudan erişmek yerine, oyuncunun bilgilerine kontrollü erişim sağlayan yöntemler oluşturacaksın.
Kodunu iki dosyaya ayıracaksın:
Player.lua: Standart prototip kalıbıylaPlayersınıfını tanımla. Yapıcı, bir ad kabul etmeli ve sağlığı100olarak başlatmalı. Üç getter yöntemi ekle::getName()oyuncunun adını döndürür:getHealth()oyuncunun mevcut sağlığını döndürür:getStatus()her iki bilgi parçasını birleştiren biçimlendirilmiş bir dize döndürür
main.lua: Player modülünü içe aktar ve bir oyuncu örneği oluştur. Oyuncunun bilgilerini görüntülemek için getter yöntemlerini kullan: her şeye alanları doğrudan okumak yerine yöntemler üzerinden eriş.
:getStatus() yöntemin tam olarak şu biçimde bir dize döndürmeli:
[name] has [health] HPBir girdi alacaksın: oyuncunun adı.
Ana dosyanda, verilen adla bir oyuncu oluştur, ardından getter yöntemlerini kullanarak üç satır yazdır:
- Oyuncunun adı (
:getName()kullanarak) - Oyuncunun sağlığı (
:getHealth()kullanarak) - Oyuncunun tam durumu (
:getStatus()kullanarak)
Örneğin, girdi Luna ise çıktı şöyle olmalı:
Luna
100
Luna has 100 HPKendin dene
-- Player modülünü gerektir
local Player = require('Player')
-- Girdiyi oku
local name = io.read()
-- TODO: Verilen adla bir oyuncu örneği oluştur
-- TODO: :getName() kullanarak oyuncunun adını yazdır
-- TODO: :getHealth() kullanarak oyuncunun sağlığını yazdır
-- TODO: :getStatus() kullanarak oyuncunun durumunu 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