Содержание

Шпаргалка 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. Типичные ошибки

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. Полезные ссылки


Antistatus 15.04.2026 08:45