Когда ты открыл Lua и подумал: «Подождите, а где фигурные скобки?»
Есть языки, от которых хочется закрыть ноутбук и пойти пасти коров в деревню. А есть Lua — язык, который встречает тебя как старый друг: без лишних церемоний, без пятиэтажных конструкций и без ощущения, что ты случайно открыл чужую диссертацию по квантовой физике.
Если ты когда-нибудь играл в World of Warcraft, Roblox или мод на Garry's Mod — поздравляю, ты уже косвенно пользовался Lua. Этот язык буквально везде, где нужно что-то быстро заскриптовать, не разворачивая при этом космическую станцию из зависимостей.

Шаг 0: Установка (спойлер — это быстро)
Lua — один из самых лёгких языков в плане установки. Никаких гигабайтных SDK, никаких «пожалуйста, обновите вашу версию Java до 847.3».
На Linux/macOS:
# Ubuntu/Debian
sudo apt install lua5.4
# macOS (через Homebrew)
brew install luaНа Windows:
Скачай LuaBinaries с официального сайта или поставь через scoop:
scoop install luaПроверяем, что всё работает:
lua -vЕсли в ответ прилетело что-то вроде Lua 5.4.7 — ты в деле. Если нет — ну, классика, проверь PATH.
Шаг 1: Hello, World! (ритуал посвящения)
Создай файл hello.lua и напиши:
print("Hello, World!")Запусти:
lua hello.luaВсё. Один. Один единственный вызов. Без public static void main, без import, без #include <iostream>. Lua уважает твоё время.
Для сравнения, вот то же самое на Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}Lua на это смотрит как:
«Братан, зачем столько букв? print() и пошли дальше.»
Шаг 2: Переменные — просто пишешь и всё
В Lua не нужно объявлять тип переменной. Никаких int, string, float. Lua сам разберётся:
name = "Алексей"
age = 25
is_developer = true
print(name) -- Алексей
print(type(age)) -- number
print(type(name)) -- stringЛокальные переменные объявляются через local — и это считается хорошим тоном:
local score = 100
local player = "Hero"Почему local? Потому что без него переменная становится глобальной, а глобальные переменные в большом проекте — это как оставить ключи от квартиры под ковриком. Вроде удобно, но потом будешь удивляться.
Шаг 3: Условия — if, elseif, else, end
local hp = 30
if hp > 50 then
print("Всё норм, воюем дальше")
elseif hp > 0 then
print("Аккуратнее, HP на исходе!")
else
print("Game Over. Респаун через 5 секунд")
endОбрати внимание: вместо { и } — then и end. Поначалу непривычно, но потом ты поймёшь, что это даже чище читается. Lua любит слова, а не символы.
Ещё один момент — в Lua нет !=. Вместо него используется ~=:
if name ~= "Admin" then
print("Доступ запрещён")
endДа, тильда. Просто прими это.
Шаг 4: Циклы — крутим, вертим
while:
local i = 1
while i <= 5 do
print("Итерация: " .. i)
i = i + 1
endКстати, .. — это конкатенация строк в Lua. Не +, не concat(), а просто две точки.
for:
for i = 1, 5 do
print("Шаг " .. i)
end-- С шагом
for i = 10, 1, -1 do
print(i)
end
print("Поехали! 🚀")for-in (для обхода таблиц):
local fruits = {"яблоко", "банан", "манго"}
for index, fruit in ipairs(fruits) do
print(index .. ". " .. fruit)
endШаг 5: Функции — пишем свои команды
local function greet(name)
return "Привет, " .. name .. "! Добро пожаловать в Lua"
end
print(greet("Мария"))Функции в Lua — это first-class citizens. Их можно сохранять в переменные, передавать как аргументы, возвращать из других функций. В общем, функциональное программирование тут не на словах:
local function apply(func, value)
return func(value)
end
local function double(x)
return x * 2
end
print(apply(double, 21)) -- 4242 — ответ на всё. Совпадение? Не думаю.
Шаг 6: Таблицы — сердце Lua
Вот тут начинается магия. В Lua нет массивов, нет объектов, нет словарей. Зато есть таблицы — универсальная структура данных, которая заменяет всё:
-- Как массив
local colors = {"красный", "зелёный", "синий"}
print(colors[1]) -- красный (индексация с 1!)
-- Как словарь
local player = {
name = "Warrior",
hp = 100,
level = 5
}
print(player.name) -- Warrior
print(player["hp"]) -- 100
-- Как объект с методами
function player:takeDamage(damage)
self.hp = self.hp - damage
print(self.name .. " получил " .. damage .. " урона. HP: " .. self.hp)
end
player:takeDamage(25) -- Warrior получил 25 урона. HP: 75Важный момент: индексация в Lua начинается с 1, а не с 0. Да, это та самая деталь, которая будет вызывать у тебя экзистенциальный кризис, если ты привык к JavaScript или Python. Но ты привыкнешь.
Шаг 7: Мини-проект — текстовый квест
Пора собрать всё вместе. Вот тебе маленькая текстовая игра:
local function game()
print("=============================")
print(" ПОДЗЕМЕЛЬЕ КОДА")
print("=============================")
print("")
print("Ты стоишь перед входом в тёмную пещеру.")
print("Внутри слышен странный шум...")
print("")
print("Что делаешь?")
print("1 — Входишь в пещеру")
print("2 — Уходишь домой пить чай")
print("")
io.write("Твой выбор: ")
local choice = io.read()
if choice == "1" then
print("")
print("Ты входишь и находишь... древний ноутбук!")
print("На экране открыт файл с кодом на Lua.")
print("Ты начинаешь читать... и становишься программистом!")
print("")
print("🏆 ПОБЕДА! +100 к навыку программирования")
elseif choice == "2" then
print("")
print("Мудрый выбор. Чай — это тоже важно.")
print("Но пещера будет ждать тебя...")
print("")
print("☕ КОНЕЦ. Но ты всегда можешь вернуться!")
else
print("")
print("Неизвестная команда. Пещера в замешательстве.")
print("Попробуй снова!")
end
end
game()Сохрани это в quest.lua, запусти lua quest.lua — и поздравляю, ты только что написал свою первую игру на Lua.
Что дальше?
Lua — это язык, который откроет тебе двери в геймдев (Love2D, Defold, Roblox), в embedded-разработку, в написание плагинов и скриптов для существующих приложений. Он лёгкий, быстрый и при этом удивительно мощный.
Вот несколько направлений, куда можно двигаться:
Roblox Studio — если хочешь делать игры и зарабатывать на этом
Love2D — минималистичный 2D-движок для инди-игр
Neovim — конфигурация и плагины пишутся на Lua
OpenResty/Nginx — Lua для высоконагруженных веб-серверов
Embedded/IoT — Lua отлично работает на микроконтроллерах (NodeMCU, ESP8266)
Если тебе зашёл этот формат и хочется двигаться дальше — заглядывай в Кодик. Это приложение, где можно изучать программирование с нуля: от Python и JavaScript до HTML, CSS и других технологий. Никакой сухой теории на 200 страниц — только понятные уроки с практикой, после которых ты реально понимаешь, что написал и зачем.
Кодик создан специально для тех, кто хочет учиться в своём темпе, с телефона или компьютера — без привязки к расписанию и длинным курсам.
А ещё у нас есть Telegram-канал с сообществом из 2000+ разработчиков, где регулярно выходят полезные посты по программированию, разборы задач и новости из мира разработки. Это отличный способ повторять материал и оставаться в теме — даже когда стоишь в очереди за кофе.
Итого
Lua — это тот редкий случай, когда язык программирования не пытается тебя запугать. Он минималистичный, логичный и позволяет писать рабочий код буквально с первых минут знакомства. Если ты давно хотел попробовать что-то новое или ищешь лёгкий вход в программирование — Lua будет отличным выбором.
