Menu
CoddyTech

Funkcje anonimowe

Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 13 z 54.

Skoro już rozumiesz, że funkcje można przechowywać w zmiennych i przekazywać dalej, istnieje jeszcze bardziej zwięzły sposób ich zapisywania. Zamiast zawsze nadawać funkcji nazwę, możesz utworzyć ją bezpośrednio tam, gdzie jej potrzebujesz. Nazywa się je funkcjami anonimowymi.

Funkcja anonimowa to po prostu funkcja bez nazwy. Definiujesz ją za pomocą słowa kluczowego function, po którym bezpośrednio podajesz jej parametry i ciało:

function(a, b)
    return a + b
end

Tworzy to wartość funkcji, której można od razu użyć. Funkcje anonimowe są szczególnie przydatne, gdy przekazujesz funkcje jako argumenty do innych funkcji. Pamiętasz przykład niestandardowego sortowania z wcześniejszej części? Oto jak wygląda z funkcją anonimową:

local players = {
    {name = "Alice", score = 150},
    {name = "Bob", score = 200},
    {name = "Charlie", score = 175}
}

table.sort(players, function(a, b)
    return a.score > b.score
end)

Zamiast definiować osobną funkcję o nazwie służącą do porównywania, funkcja jest tworzona bezpośrednio jako drugi argument funkcji table.sort(). Dzięki temu kod jest bardziej zwarty, a logika sortowania znajduje się dokładnie tam, gdzie jest używana.

challenge icon

Wyzwanie

Łatwy

Napisz funkcję filterByThreshold, która przyjmuje numbers i threshold, a następnie zwraca nową tablicę zawierającą tylko liczby większe od progu.

Edytor zawiera już funkcję pomocniczą filter(list, keep): wywołuje keep(value) dla każdej wartości i zwraca nową tablicę z wartościami, dla których keep zwróciło true. Wywołaj filter i przekaż warunek jako funkcję anonimową zapisaną bezpośrednio w wywołaniu, tak jak w lekcji przekazywana jest funkcja do table.sort(). Nie zapisuj warunku w zmiennej ani nie nadawaj mu nazwy.

Parametry:

  • numbers (tablica): Tablica w formie listy zawierająca wartości liczbowe
  • threshold (liczba): Minimalna wartość (wyłączna) używana do filtrowania

Zwraca: Tablicę zawierającą tylko liczby większe od progu (tablica)

Spróbuj swoich sił

local function filter(list, keep)
    local result = {}
    for _, value in ipairs(list) do
        if keep(value) then
            table.insert(result, value)
        end
    end
    return result
end

function filterByThreshold(numbers, threshold)
    -- Wpisz tutaj kod
end
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Lua online