Menu
Coddy logo textTech

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

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

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

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

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

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

Здесь функция присваивается переменной 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))  -- Output: 10
challenge icon

Задание

Легко

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

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

Логика:

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

Параметры:

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

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

Шпаргалка

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

Сохранение функции в переменной:

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

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

Передача функции в качестве аргумента:

function executeAction(action)
    action()
end

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

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

Возврат функции из другой функции:

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

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

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

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

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

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