Adlandırma Kuralları
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 43 / 70.
Lua'da tüm tablo alanlarına varsayılan olarak herkese açık şekilde erişilebilir. Herkes self.health değerini doğrudan okuyabilir veya değiştirebilir. Lua gizliliği zorunlu kılmasa da programcılar, hangi alanların dahili uygulama ayrıntıları olarak ele alınması gerektiğini belirtmek için adlandırma kurallarını kullanır.
Standart kural, private alanların başına alt çizgi koymaktır:
local Player = {}
Player.__index = Player
function Player:new(name)
local obj = {
name = name, -- Public: doğrudan erişmek sorun değil
_health = 100, -- Private: bunun yerine metotları kullan
_score = 0 -- Private: dahili takip
}
setmetatable(obj, Player)
return obj
end
function Player:getHealth()
return self._health
end
function Player:takeDamage(amount)
self._health = self._health - amount
endAlt çizgi, Lua’nın çalışma şeklini değiştirmez: player._health hâlâ teknik olarak erişilebilirdir. Ancak diğer programcılara (ve gelecekteki kendine) açık bir uyarı niteliği taşır: "Bu alan özel olması için tasarlanmıştır. Bunun yerine yöntemler aracılığıyla erişin."
Bu kural önemlidir; çünkü arayüzü (başkalarının kullanması gereken şey) uygulamadan (dahili olarak nasıl çalıştığından) ayırır. Daha sonra doğrulama eklemeniz veya sağlığın nasıl depolandığını değiştirmeniz gerekirse yalnızca metotları değiştirirsiniz: :getHealth() kullanan kod değişmeden çalışmaya devam eder.
Görev
KolayAlt çizgi adlandırma kuralını kullanarak hangi alanların özel olması gerektiğini doğru şekilde belirten bir BankAccount sınıfı oluşturalım!
Kodunuzu iki dosyaya ayıracaksınız:
BankAccount.lua: Hesap bilgilerini yöneten bir sınıf oluşturun. Yapıcı:new(ownerName, initialBalance), sahibin adını genel bir alanda (owner) ve bakiyeyi özel bir alanda (_balance) saklamalıdır. Üç yöntem ekleyin::getBalance(): mevcut bakiyeyi döndürür:deposit(amount): tutarı_balancedeğerine ekler:getOwner(): sahibin adını döndürür
main.lua: BankAccount modülünü içe aktarın, sahibin adını, başlangıç bakiyesini ve yatırma tutarını girdiden okuyun. Bir hesap oluşturun, para yatırın, ardından sahibi ve son bakiyeyi yazdırın.
Üç girdi alacaksınız:
- Sahibin adı
- Başlangıç bakiyesi (bir sayı)
- Yatırma tutarı (bir sayı)
Çıktınız, yatırma işleminden sonraki sahibi ve son bakiyeyi gösteren iki satır olmalıdır:
Owner: {ownerName}
Balance: {finalBalance}Örneğin girdiler Maria, 500 ve 150 ise çıktı şöyle olmalıdır:
Owner: Maria
Balance: 650Unutmayın: _balance üzerindeki alt çizgi ön eki, diğer programcılara bu alana doğrudan erişmek yerine :getBalance() ve :deposit() gibi yöntemler aracılığıyla erişilmesi gerektiğini belirtir. Alt çizgi içermeyen owner alanı ise bu alana genel olarak erişmenin uygun olduğunu gösterir.
Kendin dene
-- BankAccount modülünü yükle
local BankAccount = require('BankAccount')
-- Girdileri oku
local ownerName = io.read()
local initialBalance = tonumber(io.read())
local depositAmount = tonumber(io.read())
-- TODO: ownerName ve initialBalance ile yeni bir BankAccount oluştur
-- TODO: depositAmount kullanarak para yatır
-- TODO: Sahibi ve son bakiyeyi gerekli formatta yazdır
-- Biçim:
-- Owner: {ownerName}
-- Balance: {finalBalance}
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