Переменные и типы в Lua: чем они отличаются от Python и JS
Разбираем, как устроены переменные и типы в Lua, и чем они отличаются от привычных Python и JavaScript.
Когда начинаешь работать с Lua, один из первых вопросов — как тут устроены переменные и типы? Особенно если ты уже писал на Python или JavaScript, где вроде всё тоже «динамическое», но есть нюансы. Давайте разберёмся.
В Lua переменные по умолчанию глобальные. Это сильно отличает язык от Python и JavaScript, где всё, что создаёшь внутри функции, — локально.
x = 10 -- глобальная переменная
local y = 5 -- локальная переменная
👉 Хорошая практика — всегда использовать local
, чтобы не засорять глобальное пространство имён и не ловить неожиданные баги.

Типы в Lua: 8 базовых
nil
boolean
number
string
function
userdata
thread
table
local a = 42 -- number
local b = "hello" -- string
local c = true -- boolean
local d = nil -- nil
📌 В отличие от Python, где числа делятся на int
, float
, complex
, в Lua всё это просто number
. Упрощает жизнь, но иногда снижает контроль.
Динамическая типизация: как в JS и Python?
Да, Lua, как и Python/JavaScript, — язык с динамической типизацией. Переменная может менять тип на лету:
local v = 10
print(type(v)) -- number
v = "строка"
print(type(v)) -- string
# Python
x = 10
x = "строка"
// JavaScript
let x = 10
x = "строка"
Но есть тонкий момент: в Lua нет встроенных механизмов для ограничения типа (в отличие от TypeScript, mypy и т.д.). Всё держится на дисциплине программиста.

Таблицы: главный универсальный тип
Если в Python есть списки, словарики, множества, а в JS — объекты и массивы, то в Lua всё это объединено в один тип — table
.
local arr = {1, 2, 3} -- как массив
local dict = {x=10, y=20} -- как словарь
👉 В этом кроется мощь Lua: меньше типов — больше гибкости. Но и больше ответственности 😅.
Чем Lua отличается от Python и JS?
Характеристика | Lua | Python | JavaScript |
---|---|---|---|
Переменные по умолчанию | Глобальные | Локальные в функции | Локальные в функции (let/const) |
Кол-во встроенных типов | 8 | 14+ | 7+ |
Тип чисел | Один (number) | int, float, complex | number, bigint |
Главная структура данных | table | list, dict, set, tuple | object, array |
Система типов | Динамическая, без ограничений | Динамическая, но строгая | Динамическая, с «магией» (NaN и пр.) |
Lua — язык с простой и гибкой моделью данных. Он не перегружен типами, как Python, и не такой «странный» с числами, как JavaScript. Но из-за глобальных переменных и отсутствия строгой типизации нужно быть особенно внимательным.
📌 Поэтому, если хочешь писать на Lua без боли — всегда ставь local
и чётко следи за тем, что хранится в переменных.
В Кодике мы делаем обучение программированию увлекательным и понятным: у нас есть интересные курсы с заданиями, которые помогают прокачивать навыки шаг за шагом.
А ещё у нас есть активный telegram-канал, где мы обсуждаем крутые идеи, делимся опытом и вместе разбираем задачи — учиться становится не только полезно, но и весело.