language

level

2

Lua

Lua is the language of game scripts: Roblox, World of Warcraft, Defold and hundreds of games. Small and fast, it is built into programs that need scripting.

Lua is how game mechanics, mods and scripts inside programs are written.

20 blocks · 162 lessons

You can add a profession to this language as a pair for 2099 ₽. Pick a profession

progress

0%

block 1

Первые шаги

Вывод через print и несколько значений через табуляцию, строки и числа, переменные и local, изменение переменных, пустое значение nil, арифметика, склейка строк .., комментарии -- и --[[ ]], чтение ошибок.

  1. 1Первая программа на Lua
  2. 2Несколько значений в одном print1399 ₽
  3. 3Строки и числа: кавычки и type1399 ₽
  4. 4Арифметика: Lua как калькулятор1399 ₽
  5. 5Переменные и слово local1399 ₽
  6. 6Изменение переменных: x = x + 11399 ₽
  7. 7Пустое значение nil1399 ₽
  8. 8Склейка строк через ..1399 ₽
  9. 9Комментарии -- и --[[ ]]1399 ₽
  10. 10Ошибки и как их читать1399 ₽
  11. Проверка блока1399 ₽

block 2

Числа

Целые и дробные числа и math.type, деление / и //, остаток %, степень ^, библиотека math (floor, ceil, abs, max, min, sqrt, pi, huge), tonumber и tostring, string.format с %d и %.2f, math.tointeger и деньги в копейках.

course
  1. 1Целые и дробные: integer и float1399 ₽
  2. 2Деление нацело // и остаток %1399 ₽
  3. 3Степень ^, math.sqrt и math.pi1399 ₽
  4. 4Округление: math.floor, math.ceil и math.abs1399 ₽
  5. 5math.max, math.min и math.huge1399 ₽
  6. 6tonumber и tostring1399 ₽
  7. 7string.format: %d, %.2f и math.tointeger1399 ₽
  8. 8Деньги в копейках: почему 0.1 + 0.2 ~= 0.31399 ₽
  9. Проверка блока1399 ₽

block 3

Строки

Длина # и string.sub, upper, lower, rep и reverse, вызов методов через двоеточие, поиск string.find, string.format с шириной и выравниванием, экранирование и длинные строки [[ ]], коды символов string.byte и string.char, кириллица в UTF-8 и utf8.len.

course
  1. 1Длина # и вырезание string.sub1399 ₽
  2. 2upper, lower, rep и reverse1399 ₽
  3. 3Методы через двоеточие: s:upper()1399 ₽
  4. 4Поиск подстроки: string.find1399 ₽
  5. 5string.format: ширина, выравнивание и %s1399 ₽
  6. 6Экранирование и длинные строки [[ ]]1399 ₽
  7. 7Коды символов: string.byte и string.char1399 ₽
  8. 8Кириллица в UTF-8: # и utf8.len1399 ₽
  9. Проверка блока1399 ₽

block 4

Условия

Логический тип boolean и сравнения с ~=, условия if, elseif и else, операторы and, or и not, истинность значений (ложны только nil и false), идиомы x = a or b и a and b or c, сравнение строк.

course
  1. 1Логический тип и сравнения1399 ₽
  2. 2Условие if … then … end1399 ₽
  3. 3Ветки else и elseif1399 ₽
  4. 4Операторы and, or и not1399 ₽
  5. 5Истинность: ложны только nil и false1399 ₽
  6. 6Значение по умолчанию: x = a or b1399 ₽
  7. 7Выбор значения: a and b or c1399 ₽
  8. 8Сравнение строк1399 ₽
  9. Проверка блока1399 ₽

block 5

Циклы

Числовой цикл for с шагом и обратным отсчётом, циклы while и repeat-until, досрочный выход break, пропуск шага через goto continue, счётчики, суммы и поиск максимума, вложенные циклы и вывод без перевода строки io.write.

course
  1. 1Числовой цикл for1399 ₽
  2. 2Шаг цикла и обратный отсчёт1399 ₽
  3. 3Цикл while: повторять, пока верно1399 ₽
  4. 4Цикл repeat … until1399 ₽
  5. 5Досрочный выход: break1399 ₽
  6. 6Пропуск шага: goto continue1399 ₽
  7. 7Счётчики, суммы и максимум1399 ₽
  8. 8Вложенные циклы1399 ₽
  9. Проверка блока1399 ₽

block 6

Таблицы как массивы

Таблица как массив с индексами от единицы, длина #t, добавление t[#t + 1] и table.insert, удаление table.remove, перебор for и ipairs, склейка table.concat, поиск максимума и минимума, сортировка table.sort с функцией сравнения, двумерные таблицы и дыры в массиве, из-за которых # врёт.

course
  1. 1Таблица-массив: индексы с единицы1399 ₽
  2. 2Добавление и удаление: table.insert и table.remove1399 ₽
  3. 3Перебор массива: for и ipairs1399 ₽
  4. 4table.concat: массив в одну строку1399 ₽
  5. 5Поиск в массиве, максимум и минимум1399 ₽
  6. 6table.sort и функция сравнения1399 ₽
  7. 7Таблицы в таблицах: двумерный массив1399 ₽
  8. 8Дыры в массиве: почему # врёт1399 ₽
  9. Проверка блока1399 ₽

block 7

Таблицы как словари

Таблица как словарь: ключи через t.key и t["key"], проверка t[k] == nil и удаление t[k] = nil, обход pairs и сортировка ключей для стабильного вывода, подсчёт частот, массивы записей, таблица как ссылка и её копия, числовые и строковые ключи, множества и группировка.

course
  1. 1Таблица как словарь: ключи и значения1399 ₽
  2. 2Есть ли ключ: проверка nil и удаление1399 ₽
  3. 3Обход словаря pairs и сортировка ключей1399 ₽
  4. 4Подсчёт частот: counts[k] = (counts[k] or 0) + 11399 ₽
  5. 5Массив записей: таблицы внутри таблицы1399 ₽
  6. 6Таблица — это ссылка: общая таблица и копия1399 ₽
  7. 7Числовые и строковые ключи в одной таблице1399 ₽
  8. 8Множество и группировка по ключу1399 ₽
  9. Проверка блока1399 ₽

block 8

Функции

Свои функции через function и local function, return, параметры и значения по умолчанию через or, лишние и недостающие аргументы, несколько возвращаемых значений, переменное число аргументов ... и select('#', ...), table.pack и table.unpack, функции как значения в таблицах, рекурсия и таблица параметров в вызове f{...}.

course
  1. 1Свои функции: local function и return1399 ₽
  2. 2Аргументы: лишние, недостающие и по умолчанию1399 ₽
  3. 3Несколько возвращаемых значений1399 ₽
  4. 4Переменное число аргументов: ... и select1399 ₽
  5. 5table.pack и table.unpack1399 ₽
  6. 6Функции как значения: в переменных и таблицах1399 ₽
  7. 7Рекурсия: функция вызывает саму себя1399 ₽
  8. 8Таблица параметров: вызов f{...}1399 ₽
  9. Проверка блока1399 ₽

block 9

Замыкания

Замыкания и upvalue: функция, которая помнит переменные снаружи, счётчик-генератор, общие переменные для нескольких функций, функции высшего порядка map, filter и reduce своими руками, сортировка по ключу через фабрику компараторов, мемоизация и собственные итераторы для цикла for … in.

course
  1. 1Замыкание: функция помнит переменные снаружи1399 ₽
  2. 2Счётчик-генератор: состояние внутри замыкания1399 ₽
  3. 3Общие upvalue: несколько функций с одним состоянием1399 ₽
  4. 4Функции высшего порядка: map своими руками1399 ₽
  5. 5filter и reduce: отбор и свёртка1399 ₽
  6. 6Сортировка по ключу через компаратор1399 ₽
  7. 7Мемоизация: запоминаем результаты1399 ₽
  8. 8Свой итератор для for … in1399 ₽
  9. Проверка блока1399 ₽

block 10

Строки и образцы

Образцы Lua в string.find, string.match, string.gmatch и string.gsub: классы %d, %a, %s, %w, точка и наборы [ ], повторы + * - ?, якоря ^ и $, захваты, %b() и %f, экранирование через %, разбор строк «ключ=значение», split своими руками и отчёты через string.format.

course
  1. 1Образцы: классы символов %d, %a, %s и %w1399 ₽
  2. 2Повторы + * - ? и наборы [ ]1399 ₽
  3. 3string.match и захваты, якоря ^ и $1399 ₽
  4. 4string.gmatch: все совпадения по очереди1399 ₽
  5. 5string.gsub: замена по образцу1399 ₽
  6. 6Разбор строк «ключ=значение» и отчёт1399 ₽
  7. 7split своими руками: разбить строку по разделителю1399 ₽
  8. 8%b, %f и экранирование спецсимволов1399 ₽
  9. Проверка блока1399 ₽

block 11

Модули и область видимости

Область видимости в Lua: глобальные переменные и таблица _G, local, блоки do … end и затенение имён, модуль как таблица local M = {} … return M, require и package.preload, приватные части модуля, константы <const>, уборка через <close> и чистые функции.

course
  1. 1Глобальные переменные, local и таблица _G1399 ₽
  2. 2Блоки do … end и затенение имён1399 ₽
  3. 3Модуль как таблица: local M = {} … return M1399 ₽
  4. 4require и package.preload1399 ₽
  5. 5Приватные функции и данные модуля1399 ₽
  6. 6Константы: <const> и таблицы настроек1399 ₽
  7. 7Атрибут <close>: уборка при выходе из блока1399 ₽
  8. 8Чистые функции и побочные эффекты1399 ₽
  9. Проверка блока1399 ₽

block 12

Метатаблицы

Метатаблицы в Lua: setmetatable и getmetatable, __index таблицей и функцией, значения по умолчанию, __newindex и таблицы только для чтения, __tostring, сравнение __eq, __lt и __le, арифметика __add, __sub, __mul, __unm и __concat, __call, __len, а также rawget, rawset и rawlen.

course
  1. 1Метатаблица и __index: значения по умолчанию1399 ₽
  2. 2__index-функция: вычисляемые поля1399 ₽
  3. 3__newindex: контроль записи и таблицы только для чтения1399 ₽
  4. 4__tostring: как таблица выглядит в print1399 ₽
  5. 5Сравнение объектов: __eq, __lt и __le1399 ₽
  6. 6Арифметика объектов: __add, __sub, __mul, __unm и __concat1399 ₽
  7. 7__call: таблица, которую можно вызвать1399 ₽
  8. 8__len, rawget, rawset и rawlen1399 ₽
  9. Проверка блока1399 ₽

block 13

Объекты и классы

Объектно-ориентированный Lua: методы с двоеточием и self, класс на таблице с Class.__index = Class и конструктором new, поля класса и поля объекта, метаметоды в классе, наследование через setmetatable(Child, { __index = Parent }), вызов метода родителя, полиморфизм и инкапсуляция через замыкания.

course
  1. 1Методы объекта: двоеточие и self1399 ₽
  2. 2Класс на таблице: Class.__index = Class и new1399 ₽
  3. 3Поля класса и поля объекта1399 ₽
  4. 4Метаметоды класса: __tostring, __lt и __eq1399 ₽
  5. 5Наследование: setmetatable(Child, { __index = Parent })1399 ₽
  6. 6Вызов метода родителя: Parent.method(self, …)1399 ₽
  7. 7Полиморфизм: один вызов — разное поведение1399 ₽
  8. 8Инкапсуляция через замыкания1399 ₽
  9. Проверка блока1399 ₽

block 14

Ошибки и их обработка

Ошибки в Lua: error и pcall, сообщения об ошибках самого Lua, error с таблицей, уровень error(msg, 2) и error(msg, 0), assert, идиома nil, err, xpcall и debug.traceback, проверка аргументов и уборка после ошибки.

course
  1. 1error и pcall: перехват ошибки1399 ₽
  2. 2Ошибки самого Lua: как читать сообщения1399 ₽
  3. 3error с таблицей: ошибка с подробностями1399 ₽
  4. 4Уровень ошибки: error(msg, 2) и error(msg, 0)1399 ₽
  5. 5assert: проверка в одну строку1399 ₽
  6. 6Идиома nil, err: ошибка как результат1399 ₽
  7. 7xpcall и debug.traceback1399 ₽
  8. 8Проверка аргументов и уборка после ошибки1399 ₽
  9. Проверка блока1399 ₽

block 15

Корутины

Корутины в Lua: coroutine.create, resume и yield, состояния coroutine.status, передача значений в обе стороны, coroutine.wrap, генераторы для цикла for … in, сценарии врагов по игровым тактам, конвейер производитель — потребитель, ошибки внутри корутин и coroutine.close.

course
  1. 1Корутина: create, resume и yield1399 ₽
  2. 2coroutine.status: suspended, running, dead1399 ₽
  3. 3Передача значений: resume и yield в обе стороны1399 ₽
  4. 4coroutine.wrap: корутина в виде функции1399 ₽
  5. 5Генераторы для цикла for … in1399 ₽
  6. 6Сценарий врага по игровым тактам1399 ₽
  7. 7Конвейер: производитель и потребитель1399 ₽
  8. 8Ошибки в корутинах и coroutine.close1399 ₽
  9. Проверка блока1399 ₽

block 16

Алгоритмы

Оценка сложности в шагах и O-нотация, сортировки пузырьком и вставками своими руками, бинарный поиск по таблице с индексами от 1, стек и очередь на таблицах, проверка скобок, рекурсия с мемоизацией в таблице-кэше и обход графа в ширину.

course
  1. 1Сложность: считаем шаги алгоритма1399 ₽
  2. 2Сортировка пузырьком и обмен a, b = b, a1399 ₽
  3. 3Сортировка вставками с функцией сравнения1399 ₽
  4. 4Бинарный поиск по отсортированной таблице1399 ₽
  5. 5Стек на таблице: отмена и проверка скобок1399 ₽
  6. 6Очередь на таблице: два индекса first и last1399 ₽
  7. 7Рекурсия с кэшем: мемоизация в таблице1399 ₽
  8. 8Обход графа в ширину: карта локаций1399 ₽
  9. Проверка блока1399 ₽

block 17

Данные: CSV, сохранения и даты

Разбор CSV из длинной строки через gmatch по строкам и полям, пустые поля и грязные данные, записи по заголовку и группировка с сортировкой ключей, свой dump таблицы в текст, загрузка данных через load в пустом окружении, даты os.time и os.date с явной датой, разница дат в днях и отчёты ровными колонками с учётом кириллицы.

course
  1. 1CSV из длинной строки: gmatch по строкам1399 ₽
  2. 2Грязные данные: пустые поля, trim и tonumber1399 ₽
  3. 3Заголовок CSV: строки становятся записями1399 ₽
  4. 4Свой dump: таблица в текст с сортировкой ключей1399 ₽
  5. 5Lua как формат данных: load в пустом окружении1399 ₽
  6. 6Даты: os.time с таблицей и os.date1399 ₽
  7. 7Сроки: разница дат в днях1399 ₽
  8. 8Отчёт колонками: ширина полей и кириллица1399 ₽
  9. Проверка блока1399 ₽

block 18

Проект: инвентарь игрока

Пишем инвентарь RPG-героя шаг за шагом: каталог предметов с весом в десятых долях килограмма, класс Inventory на метатаблице, добавление с проверкой веса и ответом nil, err, стаки и ячейки, удаление с конца таблицы, экипировка со сменой предмета, отчёт с __tostring и сортировкой по стоимости, сохранение в строку и загрузка с проверкой данных.

course
  1. 1Инвентарь: каталог предметов1399 ₽
  2. 2Инвентарь: класс на метатаблице и проверка веса1399 ₽
  3. 3Инвентарь: стаки и свободные ячейки1399 ₽
  4. 4Инвентарь: подсчёт и удаление с конца1399 ₽
  5. 5Инвентарь: экипировка и смена предмета1399 ₽
  6. 6Инвентарь: отчёт и метаметод __tostring1399 ₽
  7. 7Инвентарь: сохранение в строку1399 ₽
  8. 8Инвентарь: загрузка из строки и проверка данных1399 ₽
  9. Проверка блока1399 ₽

block 19

Проект: квесты и бой

Пишем пошаговый бой и квесты RPG: персонажи на метатаблицах с __tostring, урон с бронёй и наследник-маг с вызовом метода родителя, очередь ходов сортировкой по скорости, цикл боя до победы с функцией-наблюдателем, журнал событий, квесты с условиями-функциями, шина событий на замыканиях и сценарий на корутине, который получает результаты боёв через resume.

course
  1. 1Бой: класс персонажа на метатаблицах1399 ₽
  2. 2Бой: урон, броня и маг-наследник1399 ₽
  3. 3Бой: очередь ходов по скорости1399 ₽
  4. 4Бой: цикл раундов до победы1399 ₽
  5. 5Бой: журнал событий1399 ₽
  6. 6Квесты с условиями-функциями1399 ₽
  7. 7Шина событий: подписчики на замыканиях1399 ₽
  8. 8Сценарий на корутине: бой по шагам1399 ₽
  9. Проверка блока1399 ₽

block 20

Итоговый проект: аналитика игрового сервера

Повторение всего курса на одной рабочей задаче — журнале матчей игрового сервера: разбор строк образцами и gmatch, битые строки через error с таблицей и pcall, группировка и сортировка с запасным признаком, класс игрока с метаметодами __lt и __tostring, ленивый поиск на корутине с фильтрами-замыканиями, даты os.time и os.date, консоль администратора на таблице обработчиков и итоговый отчёт модулем.

course
  1. 1Итоговый проект: журнал матчей1399 ₽
  2. 2Итоговый проект: битые строки, error и pcall1399 ₽
  3. 3Итоговый проект: рейтинг игроков1399 ₽
  4. 4Итоговый проект: класс Player и метаметод __lt1399 ₽
  5. 5Итоговый проект: поиск на корутине и фильтры1399 ₽
  6. 6Итоговый проект: активность по дням1399 ₽
  7. 7Итоговый проект: консоль администратора1399 ₽
  8. 8Итоговый проект: модуль отчёта и сводка1399 ₽
  9. Проверка блока1399 ₽