Menu
Coddy logo textTech

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'dur

game.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ışır

Bu ö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.

challenge icon

Görev

Kolay

0 olarak başlatılmış bir score alanına sahip player adında bir tablo oluşturun.

Tabloya iki fonksiyon ekleyin:

  1. player.setScore(self, value) - nokta sözdizimi ve açık self parametresi ile tanımlanmış. self.score değerini verilen değere ayarlar.
  2. player:addBonus(amount) - iki nokta üst üste sözdizimi ile tanımlanmış. self.score değerine amount ekler.

İki girdi alacaksınız:

  1. Bir başlangıç skor değeri
  2. Eklenecek bir bonus miktarı

Aşağıdaki adımları gerçekleştirin:

  1. Başlangıç skorunu ayarlamak için nokta sözdizimini kullanarak (tabloyu ilk argüman olarak geçirerek) setScore fonksiyonunu çağırın
  2. Bonusu eklemek için iki nokta üst üste sözdizimini kullanarak addBonus fonksiyonunu çağırın
  3. player.score değ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)
quiz iconKendini test et

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