Переменные: local и global
Учимся хранить данные в переменных и понимаем, почему слово local так важно.
Переменная — это имя, под которым программа хранит значение, чтобы потом к нему обратиться.
Чтобы запомнить количество очков игрока или его имя, нам нужны переменные. В Lua у переменной нет фиксированного типа: сегодня в ней число, завтра — строка.
Создание переменной
local score = 0
local playerName = "Алиса"
score = score + 100
print(playerName, score)Вывод:
Алиса 100
Ключевое слово local объявляет локальную переменную. Это почти всегда правильный выбор.
local против global
Если написать имя переменной без local, Lua создаст глобальную переменную — она видна во всей программе:
x = 10 -- глобальная: видна везде
local y = 20 -- локальная: видна только в этом блокеГлобальные переменные кажутся удобными, но они опасны. Представьте игру, где сотни скриптов случайно используют одно имя health — они начнут затирать значения друг друга. Локальные переменные изолированы и работают быстрее.
| Свойство | local | global |
| Видимость | только свой блок | вся программа |
| Скорость доступа | быстрее | медленнее |
| Риск конфликтов | низкий | высокий |
Несколько присваиваний сразу
Lua умеет присваивать несколько значений в одной строке:
local a, b, c = 1, 2, 3
a, b = b, a -- обмен значениями без временной переменной!
print(a, b, c)Вывод:
2 1 3
Как работает под капотом
Глобальные переменные на самом деле хранятся в специальной таблице _G. Запись x = 10 — это сокращение для _G["x"] = 10. Поэтому глобальный доступ медленнее: Lua каждый раз ищет имя в этой таблице. А локальные переменные живут в быстрых «слотах» на стеке.
Частые ошибки
- Забыть
localи случайно создать глобальную переменную — частый источник багов в Roblox. - Думать, что необъявленная переменная вызовет ошибку. На самом деле обращение к несуществующей переменной даёт
nil, а не ошибку. - Считать, что переменная привязана к типу. В Lua тип хранит значение, а не переменная.
Итог
- Переменная объявляется через
local имя = значение. - Без
localсоздаётся глобальная переменная — почти всегда это нежелательно. - Локальные переменные быстрее и изолированы; глобальные живут в таблице
_G. - Lua поддерживает множественное присваивание, удобное для обмена значениями.