Menu
Coddy logo textTech

Функции как объекты первого класса

Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 12 из 54.

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

Вы можете сохранить функцию в переменной:

local greet = function()
    print("Hello!")
end

greet()  -- Вывод: Hello!

Здесь function присваивается переменной greet, и вы можете вызывать её так же, как любую обычную функцию. Это открывает широкие возможности для структурирования вашего кода.

Функции также можно передавать в качестве аргументов другим функциям. Это особенно полезно, когда вы хотите, чтобы одна функция использовала поведение, определённое в другой:

function executeAction(action)
    action()
end

local sayHello = function()
    print("Hello from a function!")
end

executeAction(sayHello)  -- Вывод: Hello from a function!

В этом примере executeAction получает функцию в качестве параметра и вызывает её. Функция sayHello передаётся так же, как вы передали бы число или строку.

Функции могут даже возвращать другие функции. Это позволяет динамически создавать функции на основе определённых условий или параметров:

function createMultiplier(factor)
    return function(number)
        return number * factor
    end
end

local double = createMultiplier(2)
print(double(5))  -- Вывод: 10
challenge icon

Задание

Легко

Напишите функцию applyOperation, которая принимает a, b и operation и возвращает результат применения функции operation к двум числам.

Параметр operation представляет собой таблицу, содержащую функцию, которая будет вызвана с аргументами a и b.

Логика:

  • Извлеките функцию из таблицы operation, используя ключ "func"
  • Вызовите эту функцию с аргументами a и b
  • Верните результат

Параметры:

  • a (number): Первое число
  • b (number): Второе число
  • operation (table): Таблица, содержащая функцию, сохранённую по ключу "func"

Возвращает: Результат вызова функции operation с a и b (number)

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

function applyOperation(a, b, operation)
    -- Напишите код здесь
end
quiz iconПроверьте себя

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

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Lua