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.

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ğil

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

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

challenge icon

Görev

Kolay

0 ile başlatılmış score alanına sahip player adlı bir tablo oluşturun.

Tabloya iki işlev ekleyin:

  1. player.setScore(self, value) - nokta sözdizimi ile ve açıkça belirtilen self parametresiyle tanımlanır. self.score değerini verilen değere ayarlar.
  2. player:addBonus(amount) - iki nokta sözdizimi ile tanımlanır. amount değerini self.score değerine ekler.

İki girdi alacaksınız:

  1. Başlangıç puanı değeri
  2. Eklenecek bonus miktarı

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

  1. Başlangıç puanını ayarlamak için nokta sözdizimini kullanarak setScore işlevini çağırın (tabloyu ilk bağımsız değişken olarak geçirin)
  2. Bonusu eklemek için iki nokta sözdizimini kullanarak addBonus işlevini çağırın
  3. player.score değ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)
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

Kendi başına pratik yap: Online Lua derleyicisi