Nokta vs İki Nokta
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 4 / 70.
Hem nokta hem de iki nokta üst üste sözdizimini öğrendiğinize göre, her birini ne zaman kullanacağınızı ve bunları yanlış bir şekilde karıştırdığınızda neler olacağını anlamak kritik öneme sahiptir.
Temel kural basittir: bir fonksiyonu nasıl tanımladığınız, onu nasıl çağırdığınızla eşleşmelidir. İki nokta üst üste ile tanımlarsanız, iki nokta üst üste ile çağırın. Nokta ve açık bir self ile tanımlarsanız, nokta ile çağırın ve tabloyu geçirin.
Onları yanlış eşleştirdiğinizde şunlar gerçekleşir:
local game = { score = 0 }
function game:addPoints(points)
self.score = self.score + points
end
-- YANLIŞ: nokta ile çağrılıyor, ancak tablo geçirilmedi
game.addPoints(10) -- Hata! self artık tablo değil, 10'durgame.addPoints(10) çağırdığınızda, Lua otomatik olarak game değerini aktarmaz. 10 değeri self haline gelir ve bu da beklenmedik davranışlara veya hatalara yol açar.
Ters yön daha bağışlayıcıdır:
function game.reset(self)
self.score = 0
end
-- İki nokta üst üste ile çağırma: game:reset(), game.reset(game) ile aynıdır
game:reset() -- self doğru bir şekilde game'i alır, bu yüzden bu çalışırBu özel durum işe yarayabilse de, kafa karışıklığı yaratır ve belirli argümanlar bekleyen fonksiyonları bozabilir. En güvenli yaklaşım tutarlı kalmaktır: fonksiyon self gerektirdiğinde hem tanımlama hem de çağırma için iki nokta üst üste kullanın, gerektirmediğinde ise nokta kullanın.
Görev
Kolay0 olarak başlatılmış bir score alanına sahip player adında bir tablo oluşturun.
Tabloya iki fonksiyon ekleyin:
player.setScore(self, value)- nokta sözdizimi ve açıkselfparametresi ile tanımlanmış.self.scoredeğerini verilen değere ayarlar.player:addBonus(amount)- iki nokta üst üste sözdizimi ile tanımlanmış.self.scoredeğerineamountekler.
İki girdi alacaksınız:
- Bir başlangıç skor değeri
- Eklenecek bir bonus miktarı
Aşağıdaki adımları gerçekleştirin:
- Başlangıç skorunu ayarlamak için nokta sözdizimini kullanarak (tabloyu ilk argüman olarak geçirerek)
setScorefonksiyonunu çağırın - Bonusu eklemek için iki nokta üst üste sözdizimini kullanarak
addBonusfonksiyonunu çağırın player.scoredeğerinin son halini yazdırın
Unutmayın: her fonksiyonu nasıl çağıracağınızı, nasıl tanımlandığıyla eşleştirin.
Kendin dene
-- Girdiyi oku
local initialScore = tonumber(io.read())
local bonusAmount = tonumber(io.read())
-- TODO: Kodunuzu aşağıya yazın
-- 1. 'score' alanı 0 olarak başlatılmış 'player' adında bir tablo oluşturun
-- 2. Açık self ile nokta sözdizimini kullanarak player.setScore(self, value) ekleyin
-- 3. İki nokta üst üste sözdizimini kullanarak player:addBonus(amount) ekleyin
-- 4. Nokta sözdizimini kullanarak setScore çağırın (tabloyu ilk argüman olarak geçirin)
-- 5. İki nokta üst üste sözdizimini kullanarak addBonus çağırın
-- Son puanı yazdır
print(player.score)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