Menu
Coddy logo textTech

Getter Metotları

Coddy'nin Lua Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 70.

self.health veya self.items gibi örnek değişkenlerde veri depolamayı öğrendin. Bu alanlara nesnenin dışından doğrudan erişebilsen de daha temiz bir yaklaşım vardır: getter yöntemlerini kullanmak.

Getter (erişimci yöntemi olarak da adlandırılır), dahili bir değer döndüren basit bir yöntemdir. player.health değerine doğrudan erişmek yerine player:getHealth() çağrısını yaparsın:

local Player = {}
Player.__index = Player

function Player:new(name)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.health = 100
    return instance
end

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Neden fazladan bir yöntemle uğraşalım? Getter'lar verilerinize kontrollü bir erişim noktası sağlar.

Şu anda :getHealth() yalnızca değeri döndürür. Ancak ileride mantık eklemek isteyebilirsin: örneğin sağlık 10'un altına düşerse "Critical" döndürmek veya sağlık her kontrol edildiğinde günlük kaydı tutmak.

Bir getter kullanıma hazır olduğunda, nesneyi kullanan herhangi bir kodu değiştirmeden bu değişiklikleri yapabilirsiniz.

local hero = Player:new("Luna")
print(hero:getHealth())  -- Çıktı: 100
print(hero:getName())    -- Çıktı: Luna

Bu desen, bir nesnenin iç yapısı ile diğer kodların onunla nasıl etkileşim kurduğu arasında net bir sınır oluşturur. Dış dünya, nesnenin alanlarına doğrudan erişmek yerine verileri metotlar aracılığıyla ister.

challenge icon

Görev

Kolay

İç verilerine erişmek için getter yöntemlerini kullanan bir Player sınıfı oluşturalım. Oyuncunun alanlarına doğrudan erişmek yerine, oyuncunun bilgilerine kontrollü erişim sağlayan yöntemler oluşturacaksın.

Kodunu iki dosyaya ayıracaksın:

  • Player.lua: Standart prototip kalıbıyla Player sınıfını tanımla. Yapıcı, bir ad kabul etmeli ve sağlığı 100 olarak başlatmalı. Üç getter yöntemi ekle:
    • :getName() oyuncunun adını döndürür
    • :getHealth() oyuncunun mevcut sağlığını döndürür
    • :getStatus() her iki bilgi parçasını birleştiren biçimlendirilmiş bir dize döndürür
  • main.lua: Player modülünü içe aktar ve bir oyuncu örneği oluştur. Oyuncunun bilgilerini görüntülemek için getter yöntemlerini kullan: her şeye alanları doğrudan okumak yerine yöntemler üzerinden eriş.

:getStatus() yöntemin tam olarak şu biçimde bir dize döndürmeli:

[name] has [health] HP

Bir girdi alacaksın: oyuncunun adı.

Ana dosyanda, verilen adla bir oyuncu oluştur, ardından getter yöntemlerini kullanarak üç satır yazdır:

  1. Oyuncunun adı (:getName() kullanarak)
  2. Oyuncunun sağlığı (:getHealth() kullanarak)
  3. Oyuncunun tam durumu (:getStatus() kullanarak)

Örneğin, girdi Luna ise çıktı şöyle olmalı:

Luna
100
Luna has 100 HP

Kendin dene

-- Player modülünü gerektir
local Player = require('Player')

-- Girdiyi oku
local name = io.read()

-- TODO: Verilen adla bir oyuncu örneği oluştur

-- TODO: :getName() kullanarak oyuncunun adını yazdır

-- TODO: :getHealth() kullanarak oyuncunun sağlığını yazdır

-- TODO: :getStatus() kullanarak oyuncunun durumunu yazdır
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