Getter Metotları
Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 13 / 70.
self.health veya self.items gibi örnek değişkenlerde veri saklamayı öğrendiniz. Nesnenin dışından bu alanlara doğrudan erişebilseniz de, daha temiz bir yaklaşım var: getter yöntemleri kullanmak.
Bir getter (erişimci yöntem olarak da adlandırılır) iç bir değeri döndüren basit bir yöntemdir. player.health'e doğrudan erişmek yerine, player:getHealth() çağrısı yaparsınız:
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 metotla uğraşalım? Getter'lar verilerinize kontrollü bir erişim noktası sağlar.
Şu anda, :getHealth() basitçe değeri döndürüyor. Ama daha sonra, mantık eklemek isteyebilirsiniz—belki sağlık 10'un altına düşerse "Kritik" döndürerek, veya her sağlık kontrol edildiğinde günlüğe kaydederek.
Bir getter tanımlandığında, 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 kodun onunla nasıl etkileşimde bulunduğu arasında net bir sınır oluşturur. Dış dünya, nesnenin alanlarına doğrudan ulaşmak yerine, veriyi yöntemler aracılığıyla ister.
Görev
Kolayİç verilerine erişmek için getter metodları kullanan bir Player sınıfı oluşturalım. Oyuncunun alanlarına doğrudan ulaşmak yerine, oyuncunun bilgilerine kontrollü erişim sağlayan metodlar oluşturacaksınız.
Kodunuzu iki dosya arasında organize edeceksiniz:
Player.lua: Standart prototype pattern ilePlayersınıfınızı tanımlayın. Kurucu bir isim kabul etmeli ve sağlığı100olarak başlatmalı. Üç getter metodu ekleyin::getName()oyuncunun ismini 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 string döndürür
main.lua: Player modülünüzü require edin ve bir oyuncu örneği oluşturun. Oyuncunun bilgilerini görüntülemek için getter metodlarını kullanın—her şeye metodlar aracılığıyla erişin, alanları doğrudan okumayın.
:getStatus() metodunuz şu tam formatta bir string döndürmelidir:
[name] has [health] HPBir girdi alacaksınız: oyuncunun ismi.
Ana dosyanızda, verilen isimle bir oyuncu oluşturun, ardından getter metodlarınızı kullanarak üç satır yazdırın:
- Oyuncunun ismi (
:getName()kullanarak) - Oyuncunun sağlığı (
:getHealth()kullanarak) - Oyuncunun tam durumu (
:getStatus()kullanarak)
Örneğin, girdi Luna ise, çıktı şu olmalıdır:
Luna
100
Luna has 100 HPKopya kağıdı
Bir getter metodu (veya erişim metodu), bir nesnenin iç bir değerini döndüren bir metoddur. Alanlara doğrudan erişmek yerine, veriyi almak için bir metodu çağırırsınız.
Temel getter metodları:
function Player:getHealth()
return self.health
end
function Player:getName()
return self.name
endGetter metodlarını kullanma:
local hero = Player:new("Luna")
print(hero:getHealth()) -- Çıktı: 100
print(hero:getName()) -- Çıktı: LunaGetter'lar verilerinize kontrollü bir erişim noktası sağlar. Bir nesnenin iç yapısı ile diğer kodun onunla nasıl etkileşimde bulunduğu arasında net bir sınır oluştururlar. Bu, nesneyi kullanan kodu değiştirmeden daha sonra mantık (doğrulama veya günlüğe kaydetme gibi) eklemenizi sağlar.
Kendin dene
-- Player modülünü gerektir
local Player = require('Player')
-- Girişi oku
local name = io.read()
-- TODO: Verilen isimle bir oyuncu örneği oluştur
-- TODO: :getName() kullanarak oyuncunun ismini 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.
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