Переменные и типы в Lua: чем они отличаются от Python и JS

Разбираем, как устроены переменные и типы в Lua, и чем они отличаются от привычных Python и JavaScript.

РазработкаLua

6 мин

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

Комментарии