Menu
Coddy logo textTech

Getter Metotları

Coddy'nin Lua Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 13 / 70.

self.health veya self.items gibi örnek değişkenlerde veri saklamayı öğrendiniz. Nesnenin dışından bu alanlara doğrudan erişebilseniz de, daha temiz bir yaklaşım var: getter yöntemleri kullanmak.

Bir getter (erişimci yöntem olarak da adlandırılır) iç bir değeri döndüren basit bir yöntemdir. player.health'e doğrudan erişmek yerine, player:getHealth() çağrısı yaparsınız:

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 metotla uğraşalım? Getter'lar verilerinize kontrollü bir erişim noktası sağlar.

Şu anda, :getHealth() basitçe değeri döndürüyor. Ama daha sonra, mantık eklemek isteyebilirsiniz—belki sağlık 10'un altına düşerse "Kritik" döndürerek, veya her sağlık kontrol edildiğinde günlüğe kaydederek.

Bir getter tanımlandığında, 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 kodun onunla nasıl etkileşimde bulunduğu arasında net bir sınır oluşturur. Dış dünya, nesnenin alanlarına doğrudan ulaşmak yerine, veriyi yöntemler aracılığıyla ister.

challenge icon

Görev

Kolay

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

Kodunuzu iki dosya arasında organize edeceksiniz:

  • Player.lua: Standart prototype pattern ile Player sınıfınızı tanımlayın. Kurucu bir isim kabul etmeli ve sağlığı 100 olarak başlatmalı. Üç getter metodu ekleyin:
    • :getName() oyuncunun ismini 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 string döndürür
  • main.lua: Player modülünüzü require edin ve bir oyuncu örneği oluşturun. Oyuncunun bilgilerini görüntülemek için getter metodlarını kullanın—her şeye metodlar aracılığıyla erişin, alanları doğrudan okumayın.

:getStatus() metodunuz şu tam formatta bir string döndürmelidir:

[name] has [health] HP

Bir girdi alacaksınız: oyuncunun ismi.

Ana dosyanızda, verilen isimle bir oyuncu oluşturun, ardından getter metodlarınızı kullanarak üç satır yazdırın:

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

Örneğin, girdi Luna ise, çıktı şu olmalıdır:

Luna
100
Luna has 100 HP

Kopya kağıdı

Bir getter metodu (veya erişim metodu), bir nesnenin iç bir değerini döndüren bir metoddur. Alanlara doğrudan erişmek yerine, veriyi almak için bir metodu çağırırsınız.

Temel getter metodları:

function Player:getHealth()
    return self.health
end

function Player:getName()
    return self.name
end

Getter metodlarını kullanma:

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

Getter'lar verilerinize kontrollü bir erişim noktası sağlar. Bir nesnenin iç yapısı ile diğer kodun onunla nasıl etkileşimde bulunduğu arasında net bir sınır oluştururlar. Bu, nesneyi kullanan kodu değiştirmeden daha sonra mantık (doğrulama veya günlüğe kaydetme gibi) eklemenizi sağlar.

Kendin dene

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

-- Girişi oku
local name = io.read()

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

-- TODO: :getName() kullanarak oyuncunun ismini 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.

Object Oriented Programming bölümündeki tüm dersler