Урок 3 из 15

Функции: код, который можно вызвать много раз

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

Теория

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

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

return завершает функцию немедленно. Этим удобно пользоваться для ранних выходов: проверил условие, не подошло — вышел, и остальной код не утонул в лестнице из if.

  • Аргументов может быть сколько угодно, включая ноль
  • Функция может вернуть несколько значений через запятую
  • Аргумент, который не передали, равен nil
  • Функцию можно положить в переменную и передать в другую функцию

Пример

Функция считает награду и возвращает её вызывающему коду.

ServerScriptService/Functions.lua
  1. local function reward(level: number, isPremium: boolean): number
  2. if level < 1 then
  3. return 0
  4. end
  5.  
  6. local base = level * 10
  7.  
  8. if isPremium then
  9. base *= 2
  10. end
  11.  
  12. return base
  13. end
  14.  
  15. print(reward(5, false))
  16. print(reward(5, true))

Задача

Напиши функцию, которая принимает имя игрока и его очки и возвращает строку вида «Аня — 250 очков». Если очков меньше нуля, функция должна вернуть «нет данных».

  • Проверку сделай в самом начале и выйди через return
Показать решение
ServerScriptService/Solution.lua
  1. local function score(name: string, points: number): string
  2. if points < 0 then
  3. return "нет данных"
  4. end
  5.  
  6. return name .. " — " .. points .. " очков"
  7. end
  8.  
  9. print(score("Аня", 250))
  10. print(score("Ким", -1))

Проверь себя

Что произойдёт с кодом после return внутри функции?

Показать ответ

return выходит из функции сразу — на этом её работа заканчивается.

Чему равен аргумент, который не передали при вызове?

Показать ответ

Недостающие аргументы становятся nil, поэтому их полезно проверять.