Функции: код, который можно вызвать много раз
Выносить повторяющийся код в функции и возвращать из них результат.
Теория
Функция — кусок кода с именем. Она принимает аргументы, что-то делает и может вернуть результат через return. Как только один и тот же код появился дважды — пора делать функцию.
Функция без имени называется анонимной, и в Roblox их очень много: почти каждое событие принимает такую функцию как обработчик.
return завершает функцию немедленно. Этим удобно пользоваться для ранних выходов: проверил условие, не подошло — вышел, и остальной код не утонул в лестнице из if.
- Аргументов может быть сколько угодно, включая ноль
- Функция может вернуть несколько значений через запятую
- Аргумент, который не передали, равен nil
- Функцию можно положить в переменную и передать в другую функцию
Пример
Функция считает награду и возвращает её вызывающему коду.
local function reward(level: number, isPremium: boolean): numberif level < 1 thenreturn 0endlocal base = level * 10if isPremium thenbase *= 2endreturn baseendprint(reward(5, false))print(reward(5, true))
Задача
Напиши функцию, которая принимает имя игрока и его очки и возвращает строку вида «Аня — 250 очков». Если очков меньше нуля, функция должна вернуть «нет данных».
- Проверку сделай в самом начале и выйди через return
Показать решение
local function score(name: string, points: number): stringif points < 0 thenreturn "нет данных"endreturn name .. " — " .. points .. " очков"endprint(score("Аня", 250))print(score("Ким", -1))
Проверь себя
Что произойдёт с кодом после return внутри функции?
Показать ответ
return выходит из функции сразу — на этом её работа заканчивается.
Чему равен аргумент, который не передали при вызове?
Показать ответ
Недостающие аргументы становятся nil, поэтому их полезно проверять.