Menu
Coddy logo textTech

Анонимные функции

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 13 из 54.

Теперь, когда вы понимаете, что функции можно сохранять в переменных и передавать их, существует еще более лаконичный способ их написания. Вместо того чтобы всегда давать функции имя, вы можете создать ее прямо там, где она вам нужна — такие функции называются анонимными.

Анонимная функция — это просто функция без имени. Вы определяете её с помощью ключевого слова function, за которым сразу следуют её параметры и тело:

function(a, b)
    return a + b
end

Это создает значение функции, которое можно использовать сразу же. Анонимные функции особенно полезны при передаче функций в качестве аргументов другим функциям. Помните пример с пользовательской сортировкой, который мы рассматривали ранее? Вот как это выглядит с анонимной функцией:

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)

Вместо того чтобы определять отдельную именованную функцию для сравнения, функция создается непосредственно в качестве второго аргумента table.sort(). Это делает код более компактным и сохраняет логику сортировки именно там, где она используется.

challenge icon

Задание

Легко

Напишите функцию filterByThreshold, которая принимает numbers и threshold и возвращает новую таблицу, содержащую только числа, превышающие пороговое значение.

Используйте table.insert() с подходом на основе анонимной функции для фильтрации чисел. Создайте логику фильтрации внутри кода, не определяя отдельную именованную функцию.

Логика:

  • Создайте пустую результирующую таблицу
  • Переберите таблицу numbers
  • Для каждого числа используйте анонимную функцию, чтобы проверить, превышает ли оно порог
  • Если проверка возвращает true, добавьте число в результирующую таблицу
  • Верните отфильтрованную результирующую таблицу

Параметры:

  • numbers (table): Таблица в виде списка, содержащая числовые значения
  • threshold (number): Минимальное значение (не включая его) для фильтрации

Возвращает: Таблицу, содержащую только числа больше порогового значения (table)

Шпаргалка

Анонимная функция — это функция без имени, определяемая с помощью ключевого слова function, за которым следуют параметры и тело:

function(a, b)
    return a + b
end

Анонимные функции полезны при передаче функций в качестве аргументов, позволяя описывать логику непосредственно там, где она используется:

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)

Это создает функцию сравнения непосредственно в качестве аргумента для table.sort(), делая код более компактным.

Попробуйте сами

function filterByThreshold(numbers, threshold)
    -- Напишите код здесь
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow