Menu
Coddy logo textTech

Шпаргалка по Lua

Последнее обновление

Hello World и запуск кода

Lua минималистичен - запускается одна инструкция.

ОперацияСинтаксис
Вывести строкуprint("Hello, World!")
Вывести несколько значенийprint("x", 1, true)
Запись без перевода строкиio.write("Hi")
Комментарий-- this is a comment
Многострочный комментарий--[[ ... ]]
Конкатенация строкprint("Hi " .. name)
Запустить файлlua app.lua
Интерактивная оболочкаlua

Переменные и типы

Переменные по умолчанию глобальны; объявляйте локальные через local.

ОперацияСинтаксис
Локальная переменнаяlocal age = 30
Глобальная переменнаяcount = 0
Множественное присваиваниеlocal a, b = 1, 2
Восемь типовnil, boolean, number, string, table, function, userdata, thread
Nil / логическиеnil, true, false
Узнать типtype(x) возвращает "number"
Преобразовать в числоtonumber("42")
Преобразовать в строкуtostring(42)

Строки

Строки неизменяемы; работают и одинарные, и двойные кавычки.

ОперацияСинтаксис
Длина#s или string.len(s)
Конкатенацияs1 .. s2
Верхний / нижний регистрs:upper(), s:lower()
Подстрокаs:sub(1, 3)
Найти подстрокуs:find("ell")
Замена (gsub)s:gsub("a", "b")
Форматированиеstring.format("%05d", 42)
Длинная строка[[ multi\nline ]]

Таблицы (основная структура данных)

Таблицы - единственный структурный тип в Lua: они служат массивами, мапами и объектами.

ОперацияСинтаксис
Пустая таблицаlocal t = {}
Как массив (с индекса 1)local t = {10, 20, 30}
Доступ к элементу массиваt[1] (первый элемент)
Таблица как мапаlocal u = {name = "Ada", age = 30}
Доступ к значению мапыu.name или u["name"]
Задать значениеt[4] = 40, u.email = "a@x.com"
Длина массивной части#t
Перебор массива (ipairs)for i, v in ipairs(t) do ... end
Перебор всех ключей (pairs)for k, v in pairs(u) do ... end
Вложенная таблицаlocal m = {a = {1, 2}}

Управление потоком

Блоки закрываются через end; ложными являются только nil и false.

ОперацияСинтаксис
If / elseif / elseif x > 0 then ... elseif x < 0 then ... else ... end
Логические операторыand, or, not
Числовой forfor i = 1, 10 do ... end
For с шагомfor i = 10, 1, -1 do ... end
Цикл whilewhile x < 100 do ... end
Repeat-untilrepeat ... until done
Breakbreak
Оператор неравенстваif a ~= b then ... end

Функции

Функции - значения первого класса и могут возвращать несколько результатов.

ОперацияСинтаксис
Определить функциюfunction add(a, b) return a + b end
Локальная функцияlocal function square(x) return x * x end
Анонимная функцияlocal f = function(x) return x * 2 end
Несколько возвращаемых значенийfunction bounds() return 1, 10 end
Захватить несколько возвратовlocal lo, hi = bounds()
Вариативная функцияfunction sum(...) ... end
Собрать varargslocal args = {...}
Метод (синтаксис с двоеточием)function obj:greet() ... end

Библиотека string

Частые функции из библиотеки string (вызываемые как s:fn()).

ФункцияЧто делает
string.len(s)Длина строки
string.sub(s, i, j)Подстрока от индекса i до j
string.upper(s)Копия в верхнем регистре
string.rep(s, n)Повторить строку n раз
string.find(s, p)Найти шаблон, возвращает начало/конец
string.match(s, p)Вернуть первое совпадение с шаблоном
string.gsub(s, p, r)Заменить все совпадения с шаблоном
string.format(fmt, ...)Отформатировать значения в строку

Библиотеки table и math

Помощники для работы с массивными таблицами и числами.

ФункцияЧто делает
table.insert(t, v)Добавить значение в конец
table.insert(t, i, v)Вставить v на позицию i
table.remove(t, i)Удалить и вернуть элемент на позиции i
table.concat(t, ", ")Объединить элементы в строку
table.sort(t)Отсортировать массив на месте
math.floor(x) / math.ceil(x)Округлить вниз / вверх
math.max(...) / math.min(...)Наибольший / наименьший аргумент
math.random(1, 6)Случайное целое в диапазоне

Метатаблицы (кратко)

Метатаблицы позволяют настраивать поведение таблиц - операторы, индексирование и многое другое.

ОперацияСинтаксис
Задать метатаблицуsetmetatable(t, mt)
Получить метатаблицуgetmetatable(t)
Запасной вариант для отсутствующих ключейmt.__index = defaults
Значение по умолчанию через функциюmt.__index = function(t, k) ... end
Настроить сложениеmt.__add = function(a, b) ... end
Настроить tostringmt.__tostring = function(t) ... end
ООП на основе прототиповmt.__index = ClassTable

Синтаксис Lua, который нужен чаще всего, на одной странице. Эта шпаргалка по Lua - быстрый справочник по ядру языка: переменные и типы, строки, управление потоком, функции и таблицы, которые служат единственной гибкой структурой данных в Lua, а также краткий обзор стандартных библиотек и метатаблиц.

Всё здесь - стандартный Lua, который работает на обычном интерпретаторе. Копируйте нужное или попробуйте каждый фрагмент вживую в playground для Lua - без установки.

Часто задаваемые вопросы по шпаргалке Lua

Эта шпаргалка по Lua бесплатна?
Да. Эта шпаргалка по Lua полностью бесплатна, регистрация не требуется. Добавьте её в закладки и возвращайтесь, когда нужно посмотреть операцию с таблицей, строковую функцию или ключевое слово управления потоком.
Как таблица Lua может быть и массивом, и мапой?
Таблица - это просто набор пар ключ-значение, и ключом может быть любое значение. Когда вы используете последовательные целочисленные ключи, начиная с 1 ({10, 20, 30}), таблица ведёт себя как массив; когда вы используете строковые ключи ({name = "Ada"}), она ведёт себя как мапа. Вы даже можете смешивать оба варианта в одной таблице. Поэтому Lua нужен лишь один структурный тип - таблица покрывает массивы, словари, множества и объекты.
Почему в Lua индексация с 1?
По соглашению и замыслу массивы в Lua начинаются с индекса 1, а не 0 - так что t[1] - первый элемент, а #t - их количество. Оператор длины # и библиотечные функции вроде table.insert и ipairs исходят из соглашения о начале с 1, поэтому придерживаясь его, вы сохраняете ожидаемое поведение кода с массивами.
Можно ли практиковать Lua онлайн?
Да. Откройте playground для Lua, чтобы выполнить любой фрагмент из этой шпаргалки прямо в браузере - без установки Lua. А если нужна структура, бесплатный интерактивный курс Lua от Coddy шаг за шагом проведёт вас от переменных и таблиц до функций и метатаблиц.
Подходит ли эта шпаргалка для начинающих?
Да. Она построена от самых распространённых тем (переменные, строки, таблицы, управление потоком) к продвинутым (стандартные библиотеки и метатаблицы), так что верхние разделы можно использовать с первого дня и постепенно осваивать остальное.
Coddy programming languages illustration

Изучайте Lua с Coddy

НАЧАТЬ