Объявление функций и аргументы

Учимся упаковывать код в переиспользуемые функции.

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

Если один и тот же код встречается дважды — пора делать функцию. Функции делают программу короче, понятнее и проще в исправлении.

Объявление функции

local function greet(name)
  print("Привет, " .. name .. "!")
end

greet("Алиса")
greet("Боб")

Вывод:

Привет, Алиса!
Привет, Боб!

Здесь name — параметр (заполнитель), а "Алиса" при вызове — аргумент (конкретное значение).

Возврат значения

Функция может вернуть результат через return:

local function square(x)
  return x * x
end

local result = square(5)
print(result)

Вывод:

25

Значения по умолчанию

В Lua нет встроенных значений по умолчанию, но их легко эмулировать через or:

local function attack(damage)
  damage = damage or 10   -- если не передали, берём 10
  print("Урон:", damage)
end

attack(25)
attack()

Вывод:

Урон:	25
Урон:	10

Когда аргумент не передан, параметр равен nil, и or подставляет запасное значение.

Функции — это значения

В Lua функция — обычное значение, как число или строка. Её можно положить в переменную или таблицу:

local actions = {}
actions.jump = function() print("прыжок") end
actions.run = function() print("бег") end
actions.jump()
actions.run()

Вывод:

прыжок
бег

Как работает под капотом

Запись local function f() end — это сокращение для local f = function() end. Функция в Lua — это объект первого класса: её можно передавать в другие функции, возвращать и хранить в таблицах. Именно на этом строятся обработчики событий в Roblox: вы передаёте функцию, которая сработает при клике.

Частые ошибки

  • Забыть end в конце функции.
  • Не вернуть значение через return и удивляться, что функция дала nil.
  • Объявить функцию без local — она станет глобальной со всеми вытекающими рисками.

Итог

  • Функция объявляется через local function имя(параметры) ... end.
  • Результат возвращается через return; без него функция даёт nil.
  • Значения по умолчанию эмулируются конструкцией param = param or default.
  • Функции — значения первого класса: их можно хранить в переменных и таблицах.
Проверьте себя
1. Как сделать значение по умолчанию для аргумента в Lua?
Afunction f(x = 10)
Bx = x or 10 внутри функции
Cdefault x = 10
DНикак, Lua это не поддерживает
2. Чем является функция в Lua?
AОсобой конструкцией, которую нельзя хранить
BЗначением первого класса — её можно положить в переменную или таблицу
CТолько глобальным объектом
DКомандой интерпретатора