Menu
Coddy logo textTech

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
end

Alt ç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.

challenge icon

Görev

Kolay

Alt ç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ı _balance değ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:

  1. Sahibin adı
  2. Başlangıç bakiyesi (bir sayı)
  3. 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: 650

Unutmayı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}
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