Menu
Coddy logo textTech

Metody dostępowe

Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 13 z 70.

Nauczyłeś się przechowywać dane w zmiennych instancji, takich jak self.health lub self.items. Chociaż możesz uzyskiwać dostęp do tych pól bezpośrednio spoza obiektu, istnieje czytelniejsze podejście: używanie metod pobierających.

Getter (nazywany również metodą dostępu) to prosta metoda, która zwraca wewnętrzną wartość. Zamiast bezpośrednio odwoływać się do player.health, wywołujesz player:getHealth():

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

Po co dodatkowa metoda? Gettery zapewniają kontrolowany dostęp do danych.

Obecnie :getHealth() po prostu zwraca wartość. Później możesz jednak chcieć dodać logikę: na przykład zwracać „Critical”, jeśli zdrowie spadnie poniżej 10, albo rejestrować każde sprawdzenie zdrowia.

Po dodaniu metody pobierającej możesz wprowadzać te zmiany bez modyfikowania kodu korzystającego z obiektu.

local hero = Player:new("Luna")
print(hero:getHealth())  -- Wynik: 100
print(hero:getName())    -- Wynik: Luna

Ten wzorzec tworzy wyraźną granicę między wewnętrzną strukturą obiektu a sposobem, w jaki inne fragmenty kodu z nim współdziałają. Zewnętrzny świat uzyskuje dane za pomocą metod, zamiast bezpośrednio odwoływać się do pól obiektu.

challenge icon

Wyzwanie

Łatwy

Zbudujmy klasę Player, która używa metod pobierających do uzyskiwania dostępu do swoich danych wewnętrznych. Zamiast odwoływać się bezpośrednio do pól gracza, utworzysz metody zapewniające kontrolowany dostęp do informacji o graczu.

Podzielisz kod na dwa pliki:

  • Player.lua: Zdefiniuj klasę Player przy użyciu standardowego wzorca prototypu. Konstruktor powinien przyjmować imię i inicjalizować zdrowie wartością 100. Dodaj trzy metody pobierające:
    • :getName() zwraca imię gracza
    • :getHealth() zwraca aktualny poziom zdrowia gracza
    • :getStatus() zwraca sformatowany ciąg znaków łączący obie te informacje
  • main.lua: Załaduj moduł Player i utwórz instancję gracza. Użyj metod pobierających, aby wyświetlić informacje o graczu: uzyskuj dostęp do wszystkich danych za pomocą metod, zamiast odczytywać pola bezpośrednio.

Metoda :getStatus() powinna zwracać ciąg znaków w dokładnie takim formacie:

[name] has [health] HP

Otrzymasz jedno wejście: imię gracza.

W pliku głównym utwórz gracza o podanym imieniu, a następnie wypisz trzy wiersze, używając metod pobierających:

  1. Imię gracza (przy użyciu :getName())
  2. Poziom zdrowia gracza (przy użyciu :getHealth())
  3. Pełny status gracza (przy użyciu :getStatus())

Na przykład, jeśli wejściem jest Luna, wynikiem powinno być:

Luna
100
Luna has 100 HP

Spróbuj swoich sił

-- Załaduj moduł Player
local Player = require('Player')

-- Odczytaj dane wejściowe
local name = io.read()

-- TODO: Utwórz instancję gracza o podanym imieniu

-- TODO: Wypisz imię gracza za pomocą :getName()

-- TODO: Wypisz punkty zdrowia gracza za pomocą :getHealth()

-- TODO: Wypisz status gracza za pomocą :getStatus()
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Lua online