План на курса

Въведение в Lua

  • Някоя история
  • Цели, особенности и нецели на Lua
  • Ресурси за документация и учебници по Lua
  • Инсталиране на интерпретатора на Lua
  • Настрояване и използване на LuaRocks

Основна синтаксис и семантика

  • Идентификатори
  • Коментари, блокови коментари
  • Глобални променливи и насилствена строгост
  • Локални променливи
  • Самостоятелни програми, аргументи на програмите
  • Единици за компилиране, фрагменти, изрази, точка и запята

Типове данни и структури от данни

  • Основни типове: nil, boolean, number, string
  • Обектни типове: функция, userdata, нишка, таблица
  • Референции/обекти срещу основни стойности
  • Значението на таблиците в Lua

Въведение в таблиците и тяхната многостранност

  • Таблиците като асоциативен масив
  • Таблиците като числови масиви, последователности

Основни конструкции за управление

  • Конструкцията if then elseif else end
  • Цикъл while
  • Цикъл repeat
  • Прост цикъл for

Обработка на грешки

  • Стойности за връщане срещу изключения
  • Преобразуване на стойност за връщане в изключение
  • Преобразуване на изключение в стойност за връщане
  • Нива на грешка

Примерни програми

  • Оценка на полином
  • Поискване с ширина първо
  • Допълнителни упражнения

Още за функции

  • Именовани аргументи
  • Обектно-ориентирани извиквания
  • Затваряне
  • Карринг
  • Оптимизация на рекурсията
  • Множествено присвояване и връщане
  • Varargs

Итератори и ко-рутини

  • Общият цикъл for
  • Безсъстоятелни срещу състоятелни итератори
  • Разлики между итератори и ко-рутини

Меттаблици и метоматери

  • Примерът с множеството
  • Метоматерите __tostring
  • Арифметични метоматери
  • Метоматерите __index, __newindex
  • Метоматерите __len

Модули и пакети

  • Използване на модули
  • Създаване на модули
  • Организиране на модули в пакети

Напредни таблици

  • Таблици за очереди и стекове
  • Таблици, описващи графи
  • Матрици като таблици
  • Свързани списъци като таблици
  • Буфери за стрингове

Меттаблици чрез примери

  • Прокси
  • Стопански
  • Запомняне
  • Динамично програмиране с запомняне
  • Примерът с Фибоначи

Среда

  • Взаимосвързаност между глобалните променливи и средата
  • Свободни променливи
  • Таблицата _ENV и таблицата _G

Още за модули

  • Различни подходи за създаване на модули
  • Модули, които променят поведението
  • Инициализация на модулите и аргументи
  • Използване на среда за имплементация на безопасни модули

Напредни итератори и ко-рутини

  • Продуцент, потребител, филтър
  • Опаковане на ко-рутини за получване на итератори
  • Безсъстоятелен итератор за свързани списъци

Принос към Екосистемата

  • Качване на пакети в MoonRocks

Функционален парадигма в Lua

  • Функцията map
  • Функцията reduce / fold

Обектно-ориентирано програмиране

  • Различни подходи за ООП
  • Различни подходи за наследяване
  • Примери

Преглед на стандартните библиотеки на Lua

Компилиране

  • Компилиране
  • Eval
  • Взаимосвързаност със средата
  • Бинарни фрагменти

Сбор на отпадъци

  • Слаби таблици
  • Финализатори, метоматери __gc

Байт код на Lua и виртуална машина

  • Генерация на байт код от изходен код
  • Четене и анализ на байт код
  • Бърз преглед на изходния код на Lua VM

Модули на C

  • Извикване на C от Lua
  • Път за търсене и зареждане на модули на C

Извикване на Lua от C

  • Стек
  • Обработка на грешки
  • Продължения

Обработка на стойности и типове на Lua от C

  • Масиви
  • Стрингове
  • Userdata
  • Меттаблици
  • Обектно-ориентирани извиквания
  • Леко userdata

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

  • Алоциращи
  • GC API

Нишки в Lua

  • Ко-рутини срещу нишки
  • Истинско многонищовост и състояния на Lua

Изисквания

Познаване на поне още един език за програмиране. Programming опит. По желание, ако сте запознати с други скриптови езици, това ще улесни разбирането на Lua.

 21 часа

Брой участници


Цена за участник

Предстоящи Курсове

Свързани Kатегории