Tabele z funkcjami
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 1 z 70.
W Lua tablice są niezwykle wszechstronne. Oprócz przechowywania danych mogą także zawierać funkcje. Pozwala to grupować powiązane operacje, dzięki czemu kod jest uporządkowany i łatwy w zarządzaniu.
Aby umieścić funkcję w tabeli, po prostu przypisz ją do klucza, tak jak każdą inną wartość:
local myTable = {
greet = function(name)
return "Hello, " .. name
end
}
print(myTable.greet("Alice")) -- Wynik: Hello, AliceMożesz też zdefiniować funkcję osobno, a następnie dodać ją do tabeli:
local myTable = {}
myTable.greet = function(name)
return "Hello, " .. name
endMożesz też użyć tej czytelniejszej, skróconej składni:
local myTable = {}
function myTable.greet(name)
return "Hello, " .. name
endWszystkie trzy podejścia dają ten sam rezultat. Wywołujesz funkcję za pomocą notacji kropkowej: myTable.greet("Alice"). Ten wzorzec łączenia funkcji z danymi stanowi podstawę programowania obiektowego w Lua.
Wyzwanie
ŁatwyUtwórz tabelę o nazwie calculator, która zawiera cztery funkcje arytmetyczne:
add(a, b)— zwraca sumęaibsubtract(a, b)— zwraca wynik odejmowaniabodamultiply(a, b)— zwraca iloczynaibdivide(a, b)— zwraca wynik dzieleniaaprzezb
Otrzymasz trzy dane wejściowe:
- Nazwę operacji (jedną z:
add,subtract,multiply,divide) - Pierwszą liczbę
- Drugą liczbę
Wywołaj odpowiednią funkcję z tabeli calculator na podstawie nazwy operacji i wypisz wynik.
Spróbuj swoich sił
-- Wczytaj dane wejściowe
local operation = io.read()
local num1 = tonumber(io.read())
local num2 = tonumber(io.read())
-- TODO: Utwórz tabelę calculator z czterema funkcjami:
-- add(a, b), subtract(a, b), multiply(a, b), divide(a, b)
-- TODO: Wywołaj odpowiednią funkcję z tabeli calculator, używając nazwy operacji
-- i wypisz wynikTa 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