Nokta vs İki Nokta
Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 4 / 70.
Artık hem nokta hem de iki nokta üst üste söz dizimini bildiğinize göre, her birini ne zaman kullanacağınızı ve bunları yanlış şekilde karıştırdığınızda ne olacağını anlamanız çok önemlidir.
Temel kural basittir: bir işlevi nasıl tanımlıyorsanız onu nasıl çağırdığınız da bununla eşleşmelidir. İki nokta üst üste ile tanımlıyorsanız, iki nokta üst üste ile çağırın. Nokta ve açıkça belirtilen self ile tanımlıyorsanız, nokta ile çağırın ve tabloyu iletin.
Onları eşleştirmediğinizde olanlar şunlardır:
local game = { score = 0 }
function game:addPoints(points)
self.score = self.score + points
end
-- WRONG: nokta ile çağırma, ama tablo geçirilmedi
game.addPoints(10) -- Hata! self artık 10, tablo değilgame.addPoints(10) çağırdığınızda Lua, game değerini otomatik olarak göndermez. 10 değeri self olur ve beklenmedik davranışlara veya hatalara neden olur.
Ters yönde daha hoşgörülüdür:
function game.reset(self)
self.score = 0
end
-- İki nokta ile çağırma: game:reset() , game.reset(game) ile aynıdır
game:reset() -- self doğru şekilde game alır, bu yüzden bu çalışırBu özel durum işe yarayabilir, ancak kafa karışıklığı yaratır ve belirli bağımsız değişkenler bekleyen işlevleri bozabilir. En güvenli yaklaşım tutarlı olmaktır: işlevin self değerine ihtiyaç duyduğu durumlarda hem tanımlama hem de çağrı için iki nokta üst üste kullanın; ihtiyaç duymadığı durumlarda ise nokta kullanın.
Görev
Kolay0 ile başlatılmış score alanına sahip player adlı bir tablo oluşturun.
Tabloya iki işlev ekleyin:
player.setScore(self, value)- nokta sözdizimi ile ve açıkça belirtilenselfparametresiyle tanımlanır.self.scoredeğerini verilen değere ayarlar.player:addBonus(amount)- iki nokta sözdizimi ile tanımlanır.amountdeğeriniself.scoredeğerine ekler.
İki girdi alacaksınız:
- Başlangıç puanı değeri
- Eklenecek bonus miktarı
Aşağıdaki adımları gerçekleştirin:
- Başlangıç puanını ayarlamak için nokta sözdizimini kullanarak
setScoreişlevini çağırın (tabloyu ilk bağımsız değişken olarak geçirin) - Bonusu eklemek için iki nokta sözdizimini kullanarak
addBonusişlevini çağırın player.scoredeğerinin son hâlini yazdırın
Unutmayın: Her işlevi, tanımlanma biçimine uygun şekilde çağırın.
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ştur
-- 2. Açık self ile nokta sözdizimi kullanarak player.setScore(self, value) ekle
-- 3. İki nokta üst üste sözdizimi kullanarak player:addBonus(amount) ekle
-- 4. setScore'u nokta sözdizimi kullanarak çağır (tabloyu ilk argüman olarak geçirerek)
-- 5. addBonus'u iki nokta üst üste sözdizimi kullanarak çağır
-- Son skoru 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şisiKendi başına pratik yap: Online Lua derleyicisi