Переменные: 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 — они начнут затирать значения друг друга. Локальные переменные изолированы и работают быстрее.

Свойствоlocalglobal
Видимостьтолько свой блоквся программа
Скорость доступабыстреемедленнее
Риск конфликтовнизкийвысокий

Несколько присваиваний сразу

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 поддерживает множественное присваивание, удобное для обмена значениями.
Проверьте себя
1. Что произойдёт, если объявить переменную без слова local?
AБудет ошибка компиляции
BОна станет глобальной
CОна станет константой
DПрограмма не запустится
2. Почему обычно предпочитают local-переменные?
AОни занимают меньше памяти на диске
BОни изолированы и работают быстрее
CОни автоматически сохраняются в файл
DТолько они могут хранить числа
3. Что вернёт обращение к никогда не объявленной переменной?
AОшибку
B0
Cnil
Dпустую строку