# Lua ![logo](images/logo.png) **Lua** - скриптовый язык программирования, который в основном используется для создания бизнес-логики приложения. Главная особенность **Lua** заключается в том, что он может использоваться как в качестве отдельного, так и встроенного скриптового языка. Уже в процессе создания разработчики поставили себе цель – сделать компактный и простой инструмент, который мог бы с легкостью работать в различных исполняющих средах и обеспечивать при этом должный уровень производительности ___ Помимо этого, **Lua** разрабатывался с учетом того, чтобы в последующем могли легко выучить его синтаксис и понять особенности. Причем простота языка делает его интересным даже непрофессиональным разработчикам. **Lua** относится к языкам программирования ООП. Благодаря встроенным средствам параллельного программирования, разработчики могут создавать многопоточные приложения без обращения к внешним библиотекам или API. При этом, в языке эффективно реализованы возможности межъязыкового взаимодействия. Где применяется язык **Lua**? Несмотря на достаточно широкое применение в промышленности, более активно он сегодня используется при разработке компьютерных игр. Связано это с тем, что **Lua** позволяет довольно легко запрограммировать поведение так называемых NPC (от англ. Non-playable characters). Также, с помощью этого языка программируются и другие персонажи, поведение которых можно впоследствии быстро менять, не оказывая влияния на движок. ___ ### Преимущества и недостатки Lua обладает следующими преимуществами: 1. Хорошая переносимость. Например, можно без особых изменений перенести программу из Windows на Linux. 2. Большое количество библиотек. Несмотря на то, что по этому параметру **Lua** проигрывает **JavaScript**, на официальном сайте языка можно найти все необходимые библиотеки для работы, которых более чем достаточно для выполнения различных задач. 3. Возможность быстрого добавления новых библиотек, написанных на языке **С**. 4. Простота синтаксиса и развертывания. Изучение языка не потребует много времени у тех, кто уже занимается программированием. Для новичков этот язык также будет просто в изучении. 5. Приложения и программы, написанные на **Lua** потребляют мало памяти. Что касается недостатков, к ним можно отнести то, что язык является скриптовым. Конечно, его можно использовать и самостоятельно, однако чаще всего он применяется вместе с другими языками программирования, например **С**. Поэтому для полноценной работы потребуется знание еще одного языка разработки. ___ ### Основы **Lua** является довольно простым в изучении языком, он имеет всего лишь 22 ключевых слова, для сравнения, в **C#** зарезервированно 77 ключевых слов ![syntax](images/syntax.jpg) Синтаксис языка напоминает **Python** или **JavaScript**, но в отличии от них, выглядит более простым и свободным. В языке практически нет строгих правил, поэтому написать одно и тоже действие можно разнообразными способами. Пример стандартного Hello World! тремя разными способами: ![Hello World](images/hello-world.png) ![output 1](images/output-1.png) ___ Помимо этого **Lua** позволяет использовать на первый взгляд абсурдное написание кода: ![test print](images/test-print.png) ![output 2](images/output-2.png) ___ ### Типы данных В языке представлены следующие типы данных: 1. Boolean - логический тип. 2. Nil - пустой тип, аналог null. 3. Number - любое число. 4. String - строка текста. 5. Function - функция. 6. Table - может быть массивом, словарём или некой реализацией класса. Однако в **Lua** используется динамическая типизация, поэтому нельзя чётко указать тип данных, не считая функций. ___ ### Пример скрипта Рассмотрим пример самого простого алгоритма сортировки, реализованного в **Lua**: ![sort](images/sort.png) Рассмотрим каждый блок в отдельности: ``` Lua function ShowTable(t) print(table.concat(t, ", ")) end ``` Данный блок является очень простым и лишь выводит массив скрепив его в одну строку с помощью ``table.concat()`` Следующий уже является более интересным: ``` Lua function Sort(t) for i = 1, #t - 1 do for j = i + 1, #t do if t[i] > t[j] then x = t[i] t[i] = t[j] t[j] = x end end end return t end ``` На первый взгляд ничего особенного, кроме самого алгоритма тут нет, однако есть пару вещей расказывающих о синтаксисе языка: + Для получения размера массива используется символ #. ``#Переменная`` + Массивы начинаются с 1, а не с 0, как это принято обычно. ``` Lua print "Table:" a = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0} ShowTable(a) print "" print "After sort:" a = Sort(a) ShowTable(a) print "" ``` Ну и само тело скрипта, в котором просто создаётся массив и вызываются функции.