Składnia z dwukropkiem
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 3 z 70.
Wpisywanie counter.increment(counter) za każdym razem jest uciążliwe i podatne na błędy. Lua oferuje prostszy sposób: operator dwukropka (:).
Gdy definiujesz funkcję za pomocą dwukropka, Lua automatycznie dodaje self jako pierwszy parametr:
local player = {
name = "Hero"
}
-- Użycie dwukropka w definicji
function player:greet()
print("Hello, I am " .. self.name)
endDwukropek działa również przy wywoływaniu funkcji. Automatycznie przekazuje tabelę jako pierwszy argument:
player:greet() -- Wynik: Hello, I am HeroJest to równoważne zapisaniu player.greet(player), ale znacznie czytelniejsze. Dwukropek obsługuje parametr self po obu stronach: podczas definiowania i wywołania.
Oto porównanie pokazujące, że oba podejścia dają identyczne wyniki:
local counter = { value = 0 }
-- Składnia z kropką (jawne self)
function counter.increment(self)
self.value = self.value + 1
end
counter.increment(counter)
-- Składnia z dwukropkiem (automatyczne self)
function counter:decrement()
self.value = self.value - 1
end
counter:decrement()Składnia z dwukropkiem to standardowy sposób definiowania i wywoływania metod w Lua. Dzięki niej kod jest krótszy i mniej powtarzalny.
Wyzwanie
ŁatwyUtwórz tabelę o nazwie greeter z polem message zainicjalizowanym wartością, którą otrzymasz jako dane wejściowe.
Dodaj metodę :sayHello(name) przy użyciu składni dwukropkowej, która wypisuje powitanie w tym formacie:
[message], [name]!Otrzymasz dwa dane wejściowe:
- Wiadomość powitalną, którą należy zapisać w
greeter.message - Imię, które należy przekazać do metody
:sayHello()
Zdefiniuj metodę przy użyciu składni dwukropkowej i wywołaj ją, również używając składni dwukropkowej. Wypisz sformatowane powitanie.
Na przykład, jeśli wiadomość to Welcome, a imię to Luna, wynikiem powinno być:
Welcome, Luna!Spróbuj swoich sił
-- Odczytaj dane wejściowe
local message = io.read()
local name = io.read()
-- TODO: Napisz swój kod poniżej
-- 1. Utwórz tabelę o nazwie 'greeter' z polem 'message'
-- 2. Dodaj metodę :sayHello(name), używając składni z dwukropkiem
-- 3. Wywołaj metodę, używając składni z dwukropkiem, aby wypisać powitanieTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online