====== Шпаргалка Lua ======
Индексация с 1! Работает везде: таблицы, строки, подстроки.
===== 1. Переменные =====
x = 10 -- глобальная
local y = 20 -- локальная (быстрее, не выходит за пределы блока)
-- Имена: буквы, цифры, _ . Нельзя начинать с цифры.
-- nil = "пусто"
===== 2. Типы данных =====
^ Тип ^ Пример ^
| nil | ''a = nil'' |
| boolean | ''true'', ''false'' |
| number | ''42'', ''3.14'', ''-7'' |
| string | ''"привет"'', ''"ok"'' |
| table | ''{1,2,3}'' |
| function | ''function() end'' |
print(type(x)) -- узнать тип
===== 3. Ввод/вывод =====
print("текст") -- с переводом строки
io.write("текст") -- без перевода
s = io.read() -- читаем строку
n = tonumber(io.read()) -- читаем число
===== 4. Условия =====
if x > 5 then
print(">5")
elseif x == 5 then
print("=5")
else
print("<5")
end
-- Операторы сравнения: == ~= < > <= >=
-- Логические: and or not
-- Короткая запись (тернарник)
result = (age >= 18) and "взрослый" or "ребенок"
===== 5. Циклы =====
-- while
while count < 10 do
count = count + 1
end
-- for (переменная = начало, конец, шаг)
for i = 1, 10 do -- 1 2 3 4 5 6 7 8 9 10
for i = 1, 10, 2 do -- 1 3 5 7 9
for i = 10, 1, -1 do -- 10 9 8 ... 1
-- repeat-until (хоть один раз выполнится)
repeat
x = x - 1
until x == 0
-- break - выход из цикла
===== 6. Таблицы (главная структура) =====
=== Как массив (индексы с 1!) ===
arr = {"a", "b", "c"}
print(arr[1]) --> a
print(#arr) --> 3 (длина)
-- Добавление/удаление
arr[4] = "d"
table.insert(arr, "e") -- в конец
table.insert(arr, 2, "x") -- на позицию 2
table.remove(arr, 2) -- удалить позицию 2
-- Перебор массива
for i, v in ipairs(arr) do
print(i, v)
end
=== Как словарь ===
dict = {name="Иван", age=30, city="Москва"}
print(dict.name) --> Иван
print(dict["age"]) --> 30
-- Добавление
dict.job = "программист"
-- Перебор словаря
for k, v in pairs(dict) do
print(k .. " = " .. v)
end
=== Полезное ===
-- Проверка существования ключа
if dict.salary then
print("есть")
end
-- Значение по умолчанию
name = dict.name or "Гость"
-- Очистка таблицы
for k in pairs(t) do t[k] = nil end
===== 7. Функции =====
-- Объявление
function add(a, b)
return a + b
end
-- Локальная функция
local function mul(a, b)
return a * b
end
-- Анонимная функция
square = function(x) return x * x end
-- Несколько возвращаемых значений
function get_min_max(t)
local min, max = t[1], t[1]
for i = 1, #t do
if t[i] < min then min = t[i] end
if t[i] > max then max = t[i] end
end
return min, max
end
a, b = get_min_max({3,1,4,1,5}) -- a=1, b=5
-- Вызов
result = add(5, 3) --> 8
===== 8. Строки =====
s = "hello"
s2 = 'world'
s3 = [[много
строк]]
-- Основные операции
print(#s) --> 5
print(s .. " " .. s2) --> hello world
print(string.upper(s)) --> HELLO
print(string.lower(s)) --> hello
print(string.sub(s, 2, 4)) --> ell (индексы с 1!)
print(string.rep("hi", 3)) --> hihihi
print(string.find(s, "ell")) --> 2 (позиция)
-- Поиск и замена
new = string.gsub("hello world", "world", "lua") --> hello lua
-- Экранирование: \n \t \\ \" \'
===== 9. Математика =====
-- Случайные числа
math.randomseed(os.time()) -- инициализация
r = math.random() -- 0..1
r = math.random(100) -- 1..100
r = math.random(10, 20) -- 10..20
-- Округление
math.floor(3.7) --> 3
math.ceil(3.2) --> 4
-- Минимум/максимум
math.min(3,1,4,1,5) --> 1
math.max(3,1,4,1,5) --> 5
-- Другое
math.abs(-5) --> 5
math.sqrt(9) --> 3
math.pi --> 3.1415926535898
===== 10. Операторы (полный список) =====
Категория Операторы
| Арифметика | ''+'' ''-'' ''*'' ''/'' ''//'' ''%'' ''^'' ''-''(унарный)
| Сравнение | ''=='' ''~='' ''<'' ''>'' ''<='' ''>=''
| Логика | ''and'' ''or'' ''not''
| Конкатенация | ''..''
| Длина | ''#''
| Присваивание | ''=''
===== 11. Полезные паттерны =====
=== Значение по умолчанию ===
name = name or "Гость"
=== Обмен значений ===
a, b = b, a
=== Проверка на nil ===
if not x then print("x = nil или false") end
if x == nil then print("только nil") end
=== Однострочный if ===
if x > 0 then print("positive") end
=== Защита от глобальных переменных ===
-- В начале файла
setfenv(1, {}) -- изолирует (Lua 5.1)
-- Или используйте 'local' везде
=== Быстрая печать таблицы (отладка) ===
function print_table(t, name)
name = name or "table"
print(name .. ":")
for k, v in pairs(t) do
print(" " .. tostring(k) .. " = " .. tostring(v))
end
end
===== 12. Типичные ошибки =====
* **Индексация с 0** → в Lua массивы **с 1**!
* **Путаница = и ==** → ''='' присваивание, ''=='' сравнение
* **Забыл then/end** → у каждого if должен быть ''then'' и ''end''
* **Забыл local** → переменные глобальные по умолчанию
* **# для словаря** → работает только для массивов без дырок
* **Сравнение с nil** → ''if x == nil'' работает, но ''if not x'' короче
===== 13. Комментарии =====
-- однострочный
--[[
многострочный
комментарий
--]]
===== 14. Запуск =====
lua script.lua # запустить скрипт
lua -i script.lua # запустить с интерактивным режимом
lua -e "print('hi')" # выполнить строку кода
===== 15. Быстрый шаблон скрипта =====
#!/usr/bin/env lua
-- -*- coding: utf-8 -*-
local function main()
print("Начало работы")
-- ваш код здесь
print("Завершено")
return 0
end
if type(package) ~= "table" or package.loaded[...] ~= true then
os.exit(main())
end
===== 16. Полезные ссылки =====
* Документация: [[https://www.lua.org/manual/5.4/]]
* Онлайн-песочница: [[https://replit.com/languages/lua]]
* Книга "Programming in Lua": [[https://www.lua.org/pil/]]
----
//[[antistatus@mail.ru|Antistatus]] 15.04.2026 08:45//