Язык программирования lua для чего

Язык программирования Lua: возможности разработки для непрофессиональных программистов

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Разработчиком этого языка является подразделение Tecgraf из Бразилии. Появился Lua в 1993 году. Авторами являются Роберту Иерузалимски, Вальдемар Селиш и Луиш Энрике ди Фигейреду. Язык имеет открытый код, то есть каждый желающий может внести свою лепту в его развитие. Важной особенностью создания этого языка является то, что он появился в Бразилии, стране, которая ни до этого ни после особенно не отличалась в плане разработки.

Прародителями Lua являются два языка разработки – SOL и DEL. Они также разработаны Tecgraf в период с 1992 по 1993 гг. Причем заказчиком выступала известная компания Petrobras. На сегодняшний день последней версией языка является 5.4.0. Обновление вышло летом 2020 года.

Как видно, Луа, наряду со многими современными языками программирования, имеет длительную историю. При этом, проводятся регулярные обновления, что говорит о том, что Lua пользуется популярностью в определенных кругах и имеет довольно серьезное сообщество.

Главная особенность Луа заключается в том, что он может использоваться как в качестве отдельного, так и встроенного скриптового языка. Уже в процессе создания разработчики поставили себе цель – сделать компактный и простой инструмент, который мог бы с легкостью работать в различных исполняющих средах и обеспечивать при этом должный уровень производительности.

Помимо этого, Луа разрабатывался с учетом того, чтобы в последующем могли легко выучить его синтаксис и понять особенности. Причем простота языка делает его интересным даже непрофессиональным разработчикам.

Lua относится к языкам программирования ООП. Благодаря встроенным средствам параллельного программирования, разработчики могут создавать многопоточные приложения без обращения к внешним библиотекам или API. При этом, в языке эффективно реализованы возможности межъязыкового взаимодействия.

Где применяется язык Lua? Несмотря на достаточно широкое применение в промышленности (не будем забывать, что язык изначально разрабатывался для нужд нефтяной компании Petrobras), более активно Луа сегодня используется при разработке компьютерных игр.

Связано это с тем, что Lua позволяет довольно легко запрограммировать поведение так называемых NPC (от англ. Non-playable characters). Также, с помощью этого языка программируются и другие персонажи, поведение которых можно впоследствии быстро менять, не оказывая влияния на движок.

Наиболее известным игровым продуктом, в котором применяется язык Lua является World of Warcraft. Здесь язык использовался при написании интерфейса. Также, Lua активно использовался и при создании других известных игровых шедевров, таких как Цивилизация 5, Crysis, Sim City, Far Cry, Stalker.

Помимо игрового применения, Луа также подходит для написания ботов для Телеграм, например. Также, Википедия планирует использовать данный язык разработки для встраивания в MediaWiki.

Наконец, применяется Lua и в обсерваториях, которые занимаются исследованиями космоса. Язык также используется различными университетами. А в самой Бразилии его применяют повсеместно. То есть он стал чем-то вроде государственного языка программирования.

Источник

Очень подробно разжёвано для чайников по LUA часть1!

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Скрипты на языке Lua

Написанный на Lua скрипт не имеет какой-либо специальной функции, с которой начиналось бы его выполнение. Скрипт можно рассматривать просто как набор команд (инструкций), который выполняется, начиная с первой инструкции.

Скрипт может быть как очень простым, состоящим всего из одной команды, так и весьма сложным, содержащим десятки, сотни и даже тысячи инструкций. Следующие друг за другом инструкции могут разделяться точкой с запятой (;). Однако это требование не является обязательным, поэтому весь приведённый ниже код является корректным с точки зрения синтаксиса:

Работа с переменными в Lua

Переменные используются для хранения значений в процессе выполнения скрипта.

Имена переменных в Lua

Именами (идентификаторами) переменных в Lua могут быть любые последовательности из букв, цифр и символа подчеркивания, начинающиеся не с цифры.

Язык Lua различает регистр символов, поэтому abc, Abc, ABC являются различными именами.

В таблице ниже приведены слова, которые зарезервированы языком Lua и не могут использоваться в именах переменных:

and break do else elseif

end false for function if

in local nil not or

repeat return then true until

Кроме того, все имена, начинающиеся с символа подчеркивания, за которым идут заглавные буквы (например, _VERSION) также являются зарезервированными.

Какие переменные бывают в Lua?

Переменные в Lua могут быть глобальными и локальными. Если переменная не объявлена явно как локальная, она считается глобальной.

Глобальные переменные Lua

Глобальная переменная появляется в момент присваивания ей первого значения. До присваивания первого значения обращение к глобальной переменной даёт nil.

Глобальная переменная существует до тех пор, пока существует среда исполнения скрипта и доступна любому Lua-коду, выполняемому в этой среде.

При необходимости удалить глобальную переменную можно явным образом, просто присвоив ей значение nil.

g = 1 — создаем глобальную переменную g со значением 1

g = nil — удаляем глобальную переменную g

Все глобальные переменные являются полями обычной таблицы, называемой глобальным окружением. Эта таблица доступна через глобальную переменную _G. Поскольку полями глобального окружения являются все глобальные переменные (включая саму _G), то _G._G == _G.

Локальные переменные Lua

Любые локальные переменные должны быть объявлены явно с использованием ключевого слова local. Объявить локальную переменную можно в любом месте скрипта. Объявление может включать в себя присваивание переменной начального значения. Если значение не присвоено, переменная содержит nil.

local a — объявляем локальную переменную a

local b = 1 — объявляем локальную переменную b, присваиваем ей значение 1

local c, d = 2, 3 — объявляем локальные переменные c и d, присваиваем им значения 2 и 3

Область видимости локальной переменной начинается после объявления и продолжается до конца блока.

Областью видимости переменной называется участок кода программы, в пределах которого можно получить доступ к значению, хранящемуся в данной переменной.

Под блоком понимается:

тело управляющей конструкции (if-then, else, for, while, repeat);

фрагмент кода, заключённый в ключевые слова do. end.

Если локальная переменная определена вне какого-либо блока, её область видимости распространяется до конца скрипта.

a = 5 — глобальная переменная a

local i = 1 — переменная i локальна в пределах скрипта

while i 1, 4, 9, 16, 25

local a — переменная а локальна внутри then

local a = 20 — переменная а локальна внутри do-end

Когда возможно, рекомендуется использовать локальные переменные вместо глобальных. Это позволит избежать «засорения» глобального пространства имён и обеспечит лучшую производительность (поскольку доступ к локальным переменным в Lua выполняется несколько быстрее, чем к глобальным).

Типы данных Lua

Какие типы данных поддерживает язык Lua?

Lua поддерживает следующие типы данных:

1. Nil (ничего). Соответствует отсутствию у переменной значения. Этот тип представлен единственным значением — nil.

2. Boolean (логический). К данному типу относятся значения false (ложь) и true (истина).

При выполнении логических операций значение nil рассматривается как false. Все остальные значения, включая число 0 и пустую строку, рассматриваются как true.

3. Number (числовой). Служит для представления числовых значений.

В числовых константах можно указывать необязательную дробную часть и необязательный десятичный порядок, задаваемый символами «e» или «E». Целочисленные числовые константы можно задавать в шестнадцатеричной системе, используя префикс 0x.

Примеры допустимых числовых констант: 3, 3.0, 3.1415926, 314.16e-2, 0xff.

4. String (строковый). Служит для представления строк.

Строковые значения задаются в виде последовательности символов, заключённой в одинарные или двойные кавычки:

b = ‘это вторая строка’

Строки, заключённые в двойные кавычки, могут интерпретировать C-подобные управляющие последовательности (escape-последовательности), начинающиеся с символа «\» (обратный слэш):

\t (горизонтальная табуляция),

Символ в строке также может быть представлен своим кодом с помощью escape-последовательности:

где ddd — последовательность из не более чем трёх цифр.

Кроме кавычек для определения строки могут также использоваться двойные квадратные скобки:

local a = [[Компания «Кронос»]]

Определение строки с помощью двойных квадратных скобок позволяет игнорировать все escape-последовательности, т. е. строка создаётся полностью так, как описана:

При определении строки с помощью двойных квадратных скобок учитываются символы табуляции и переноса.

Двойные скобки могут быть вложенными. Для того чтобы их не перепутать, между скобками вставляется символ«равно» (=):

local a = [=[определение строки [[string]] в Lua]=]

— будет срока: «определение строки [[string]] в Lua»

5. Function (функция). Функции в Lua могут быть записаны в переменные, переданы как параметры в другие функции ивозвращены как результат выполнения функций.

6. Table (таблица). Таблица представляет собой набор пар «ключ» — «значение», которые называют полями илиэлементами таблицы. Как ключи, так и значения полей таблицы могут иметь любой тип, за исключением nil. Таблицы не имеют фиксированного размера: в любой момент времени в них можно добавить произвольное число элементов.

Подробнее — в статье «Создание таблиц в Lua»

7. Userdata (пользовательские данные). Является особым типом данных. Значения этого типа не могут быть созданы или изменены непосредственно в Lua-скрипте.

Userdata используется для представления новых типов, созданных в вызывающей скрипт программе или в библиотеках, написанных на языке С. Например, библиотеки расширений Lua для «CronosPRO» используют этот тип для представления таких объектов, как:

банки данных (класс Bank);

базы данных (класс Base);

записи (класс Record) и т. п.

8. Thread (поток). Соответствует потоку выполнения. Эти потоки никаким образом не связаны с операционной системой и поддерживаются исключительно средствами самого Lua.

Как в Lua задать тип переменной?

Lua не предусматривает явного задания типа переменной. Тип переменной устанавливается в момент присвоения переменной значения. Любой переменной может быть присвоено значение любого типа (вне зависимости от того, значение какого типа она содержала ранее).

a = 123 — переменная a имеет тип number

a = «123» — теперь переменная a имеет тип string

a = true — теперь переменная a имеет тип boolean

a = <> — теперь переменная a имеет тип table

Переменные типа table, function, thread и userdata не содержат самих данных, а хранят ссылки на соответствующие объекты. При присваивании, передачи в функцию в качестве аргумента и возвращении из функции в качестве результата копирования объектов не происходит, копируются только ссылки на них.

a = <> — создаем таблицу. В переменную a помещается ссылка на таблицу

b = a — переменная b ссылается на ту же таблицу, что и a

a[1] = 10 — элементу таблицы с индексом 1 присвоено значение 10

Остальные данные являются непосредственными значениями.

Как в Lua получить тип переменной?

Тип значения, сохранённого в переменной, можно выяснить при помощи стандартной функции type. Эта функция возвращает строку, содержащую название типа («nil», «number», «string», «boolean», «table», «function», «thread», «userdata»).

t = type («это строка») — t равно «string»

t = type (123) — t равно «number»

t = type (type) — t равно «function»

t = type (true) — t равно «boolean»

t = type (nil) — t равно «nil»

t = type (CroApp.GetBank()) — t равно «userdata»

Как в Lua преобразовать тип переменной?

Lua при необходимости автоматически преобразует числа в строки и наоборот. Например, если строковое значение является операндом в арифметической операции, оно преобразуется в число. Аналогично числовое значение, встретившееся в том месте, где ожидается строковое, будет преобразовано в строку.

a = «10» + 2 — a равно 12

a = «10» + 2 — a равно «10 + 2»

a = «строка» + 2 — Ошибка! Невозможно преобразовать «строка» в число

Значение любого типа можно явным образом преобразовать в строку с помощью стандартной функции tostring.

a = tostring (10) — a равно «10»

a = tostring (true) — a равно «true»

a = tostring (nil) — a равно «nil»

a = tostring (<[1] = «это поле 1»>) — a равно «table: 06DB1058»

Из предыдущего примера видно, что содержимое таблиц функцией tostring не преобразуется. Выполнить такое преобразование можно с помощью функции render.

a = render (10) — a равно «10»

a = render (true) — a равно «true»

a = render (nil) — a равно «nil»

Для явного преобразования значения в число можно использовать стандартную функцию tonumber. Если значение является строкой, которую можно преобразовать в число (или уже является числом), функция возвращает результат преобразования, в противном случае возвращает nil.

a = tonumber («10») — a равно «10»

a = tonumber («10»..».5″) — a равно 10.5

a = tonumber (true) — a равно «nil»

a = tonumber (nil) — a равно «nil»

Расстановка комментариев в Lua

Комментарий в Lua начинается двумя знаками «минус» (—) и продолжается до конца строки.

local a = 1 — однострочный комментарий

Если непосредственно после символов «—» идут две открывающие квадратные скобки ([[), комментарий являетсямногострочным и продолжается до двух закрывающих квадратных скобок (]]).

local a = 1 — [[ многострочный

Двойные скобки в комментариях могут быть вложенными. Для того чтобы их не перепутать, между скобками вставляется знак равенства (=):

local a = [[Компания «Кронос»]] — [=[

local a = [[Компания «Кронос»]]

Количество символов «=» определяет вложенность:

local a = [=[определение некоторой строки [[string]] в языке Lua]=]

Операции, применяемые в Lua

В выражениях, написанных на Lua, могут применяться следующие виды операций:

1. Арифметические операции.

Lua поддерживает следующие арифметические операции:

^ (возведение в степень);

% (остаток от деления).

Арифметические операции применимы как к числам, так и к строкам, которые в этом случае преобразуются в числа.

2. Операции сравнения.

В Lua допустимы следующие операции сравнения величин:

Операции сравнения всегда возвращают логическое значение true или false.

Правила преобразования чисел в строки (и наоборот) при сравнениях не работают, т. е. выражение «0» == 0 даёт в результате false.

3. Логические операции.

К логическим операциям относятся:

Операция and возвращает свой первый операнд, если он имеет значение false или nil. В противном случае, операция возвращает второй операнд (причём этот операнд может быть произвольного типа).

a = (nil and 5) — a равно nil

a == (false and 5) — a равно false

a == (4 and 5) — a равно 5

Операция or возвращает первый операнд, если он не false и не nil, иначе он возвращает второй операнд.

a == (4 or 5) — a равно 4

a == (false or 5) — a равно 5

Логические операции and и or могут возвращать значения любых типов.

Логические операции and и or вычисляют значение второго операнда только в том случае, если его нужно вернуть. Если этого не требуется, второй операнд не вычисляется. Например:

a == (4 or f()) — вызова функции f() не произойдет

Операция not всегда возвращает true или false.

4. Операция конкатенации.

Для конкатенации (объединения) строк служит операция… (две точки).

a = «Кронос»..»-«..«Информ» — переменная a получит значение «Кронос-Информ»

Если один или оба операнда являются числами, выполняется их преобразование в строки.

a = 0..1 — переменная a получит значение «01»

5. Операция получения длины.

В Lua определена операция длины #, которую можно использовать для получения длины строки.

len = #a — len равно 6

len = #«ещё строка» — len равно 10

Приоритет операций в Lua

В языке Lua выполнение операций осуществляется в соответствии со следующим приоритетом (в порядке убывания):

Вызов скриптов из форм

С каждой формой (включая вложенные формы) связан отдельный скрипт, который обычно содержит функции, выполняющие обработку событий формы и её элементов.

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

Необходимо отметить, что скрипт формы, хотя и не содержит вызова функции module, фактически является модулем. Это означает, что переменные, объявленные в скрипте формы без ключевого слова local, не выносятся в глобальное окружение и доступны только внутри этого скрипта. Если необходимо сделать какое-либо значение доступным для скриптов других форм, его следует явным образом определить в глобальной таблице _G:

Другой скрипт форм сможет прочитать это значение следующим образом:

Блоки операторов (инструкций)

К основным операторам Lua относятся:

операторы для организации циклов.

Группа операторов может быть объединена в блок (составной оператор) при помощи конструкции do… end.

Блок открывает новую область видимости, в которой можно определять локальные переменные.

a = 5 — глобальная переменная a

local a = 20 — внутри do-end определяется локальная переменная а

Оператор присваивания в Lua

Присваивание изменяет значение переменной или поля таблицы. В простейшем виде присваивание может выглядеть так:

a = 1 — переменной a присвоено значение 1

a = b + c — переменной a присвоена сумма значений переменных b и с

a = f(x) — переменной a присвоено значение, возвращённое функцией f(x)

В Lua допускается так называемое множественное присваивание, когда несколько переменных, находящихся слева от оператора присваивания, получают значения нескольких выражений, записанных справа от оператора присваивания:

a, b = 1, 5*c — a равно 1; b равно 5*c

Если переменных больше чем значений, «лишним» переменным присваивается nil.

a, b, c = 1, 2 — a равно 1; b равно 2; c равно nil

Если значений больше чем переменных, «лишние» значения игнорируются.

a, b = 1, 2, 3 — a равно 1; b равно 2; значение 3 не использовано

Множественное присваивание можно использовать для обмена значениями между переменными:

a = 10; b = 20 — a равно 10, b равно 20

a, b = b, a — теперь a равно 20, b равно 10

Условный оператор (if) в Lua

Оператор if проверяет истинность заданного условия. Если условие является истинным, выполняется часть кода, следующая за ключевым словом then (секция then). В противном случае, выполняется код, следующий за ключевым словом else (секция else).

return a — если a больше b, вернуть a

return b — в противном случае — вернуть b

Секция else является необязательной.

Перед каждой итерацией цикла проверяется условие :

если условие ложно, цикл завершается и управление передаётся первому оператору, следующему за оператором while;

если условие истинно, выполняется тело цикла, после чего все действия повторяются.

while i > 0 do — цикл от 10 до 1

Для выхода из цикла до его завершения можно использовать оператор break.

while i > 0 do — ищем в массиве отрицательное значение

MsgBox («Индекс отрицательного значения: »..i)

MsgBox («Массив не содержит отрицательных значений»)

Подробнее об особенностях использования оператора break — в статье «Операторы break и return»

Цикл с постусловием (repeat) в Lua

Оператор repeat предназначен для организации циклов с постусловием и имеет следующий вид:

Тело цикла выполняется до тех пор, пока условие не станет истинным. Проверка условия осуществляется после выполнения тела цикла, поэтому в любом случае тело цикла выполнится хотя бы один раз.

— суммируем значения массива a, пока сумма не превысит 10

MsgBox («Сложено »..i..» элементов. Сумма равна «..sum)

Для выхода из цикла до его завершения можно использовать оператор break.

Подробнее об особенностях использования оператора break — в статье «Операторы break и return»

Циклы с оператором for в Lua

Оператор for предназначен для организации циклов и допускает две формы записи:

простую (числовой for);

расширенную (универсальный for).

Простая форма оператора for

Простая форма оператора for имеет следующий вид:

for var = exp1, exp2, exp3 do

Тело цикла выполняется для каждого значения переменной цикла (счётчика) var в интервале от exp1 до exp2, с шагом exp3.

Шаг может не задаваться. В этом случае он принимается равным 1.

for i = 1, 10 do — цикл от 1 до 10 с шагом 1

Выражения exp1, exp2 и exp3 вычисляются всего один раз, перед началом цикла. Так, в примере ниже, функция f(x) будет вызвана для вычисления верхнего предела цикла только один раз:

for i = 1, f(x) do — цикл от 1 до значения, возвращенного функцией f()

Переменная цикла является локальной для оператора цикла и по его окончании не определена.

for i = 1, 10 do — цикл от 1 до значения, возвращенного функцией f()

MsgBox («После выхода из цикла i равно »..i) — Неверно! i равно nil

Значение переменной цикла нельзя изменять внутри цикла: последствия такого изменения непредсказуемы.

Для выхода из цикла до его завершения используется оператор break.

for i = 1,#a do — ищем в массиве отрицательное значение

Источник

Язык программирования Lua

Lua — язык программирования (ЯП), который оснащен свободно распространяемым интерпретатором. По своей задумке он имеет некоторую схожесть с таким языком программирования, как JavaScript. Но в отличие от него Lua считается более гибким ЯП с мощными конструкциями.

Историческая справка

Разработчиком Lua является подразделение Tecgraf, которое располагается в Бразилии. Этот известный язык программирования был запущен в 1993 году. Над его разработкой трудились такие программисты, как Роберт Иерузалимски, Вальдемар Селиш, Луиш Энрике ди Фигейреду. Главная особенность языка — открытый код. Это говорит о то, что каждый желающий сможет поучаствовать в его развитии. Еще одна особенность Lua — его происхождение. Бразилия практически никогда не была замешана в сфере компьютерных разработок.

Прародителями Lua можно назвать два языка программирования — SOL, Del, которые также были выпущены подразделением Tecgraf. Заказчиком языка стала известная компания Petrobras. Последняя версия Lua — 5.4.0. Это обновление вышло во второй половине 2020 года. Несмотря на то, что этот ЯП считается достаточно взрослым, он активно продолжает использоваться в it-сфере, именно поэтому разработчики регулярно выпускают обновления ЯП, исправляют ошибки, вносят некоторые корректировки.

Общая характеристика

Язык программирования Lua применяется как отдельный или встроенный в приложение скриптовый язык. Изначально он был простым и компактным. Он должен был помещаться на исполнительных платформах и создавать хорошую производительность. Изначально разработчики языка желали сделать его простым в обучении, чтобы освоением могли заниматься не только профессионалы, но и начинающие программисты.

Сейчас Lua считается процедурным динамически модульным языком с автоматическим управлением памятью. В него входят базовые инструменты для поддержания различных стилей программирования. Lua также называют мультипарадигменным ЯП. Он дает возможность создавать многопоточные ПО без API и внешних библиотек.

Lua поддерживает небольшое количество встроенных типов данных. Комбинированные структуры в этом случае отсутствуют. Объектами первого класса в представленном языке считаются функции. Lua поддерживает замыкания, позволяет создавать функции высших порядков. Этот ЯП активно используется в сфере промышленности. Он изначально создавался для компании Petrobras, главной сферой деятельности которой была нефтяная промышленность.

Сегодня Lua также активно используется для создания игр. Это объясняется тем, что этот язык дает возможность быстро и легко программировать действия NPC. При помощи Lua можно программировать и иных персонажей. В этом случае поведение персонажей можно будет быстро менять без нагрузки на движок.

Язык программирования Луа применялся при написании интерфейса такой известной игры, как World of Warcraft. Известно, что этот ЯП применялся разработчиками и при создании многих других известных игр — Crysis, Far Cry, Stalker. Сегодня Lua также используется для создания ботов в мессенджере Telegram. Известно, что Википедия также будет использовать данный язык для MediaWiki.

Lua также используется в научных целях, например, его используют в центрах, которые занимаются исследованием космоса. Многие учебные заведения используют этот язык для создания внутренних программ. Известно, что в Бразилии Lua используется программистами практически повсеместно. Многие даже называют его местным государственным ЯП.

Код программы на ЯП Луа:

Факториал — пример рекурсивной функции:

funсtion fаctoriаl(n)
if n == 0 thеn
rеturn 1
else
return n * fаctoriаl(n — 1)
еnd
еnd

Цикл со счётчиком:

Какие главные преимущества и недостатки языка программирования Lua?

Lua имеет немало преимуществ, именно поэтому с ним работают многие компании:

У Lua есть и свои недостатки. Прежде всего этот язык считается скриптовым. Это говорит о том, что часто он используется в комбинации с другими языками программирования. Например, С. Самостоятельно Луа применяется не так часто. Поэтому программистам для полноценной работы потребуется изучить еще 1-2 языка программирования.

Мнения критиков

Вокруг этого языка программирования всегда было немало споров. Многие критики неоднократно обсуждали тот факт, что Луа разработан для работы с С, а не с С++. Это действительно так. Но при помощи некоторых библиотек программисты могут встраивать Lua и в С++. Такой принцип программирования, конечно, имеет свои недостатки. Но, несмотря на это, сегодня с ним продолжают работать многие специалисты.

Многие критики подвергали сомнению и скорость языка. Луа считался более медленным Яп, чем его конкуренты. На самом же деле, все эти убеждения оказывались ошибочными. Луа работает с какой-либо логикой, поэтому рабочий процесс здесь замедлять просто нечему.

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

Дальнейшие перспективы

Разработка игр считается весьма перспективным направлением в наши дни. Игровая индустрия развивается ежегодно, поэтому языки программирования в этом случае востребованности своей не теряют. Однако Луа не считается самым популярным ЯП в игровой сфере.

Если ориентироваться на индекс Tiobe, он занимает только 30 место. Впереди него находятся такие известные языки, как Java, Python, C. Это объясняется тем, что несмотря на востребованность в игровой сфере, Lua практически никогда не используется в одиночку. Луа необходим для создания лишь отдельных игровых компонентов. Используя только этот язык программирования, нельзя полностью создать полноценную игру.

Стоит также отметить, что современные компании все меньше и меньше нуждаются в работе разработчиков Lua. Эта вакансия становится все менее востребованной в it-сфере. Несмотря на это, существует немало желающих занять вакансию lua разработчика, если таковая имеется в определенных компаниях. Поэтому специалисты рискуют столкнуться с немалой конкуренцией при трудоустройстве.

Если у начинающего программиста в планах изучать язык Луа, необходимо понимать, что он должен быть не единственным языком, с которым придется работать, особенно в игровой сфере.

Синтаксис языка

Принцип синтаксиса Луа основывается на принципе таких языков, как Модула-2 и Оберон. Запись текста происходит в свободном формате. Разделение команд происходит пробельными символами. Иногда для разделения используется точка с запятой.

Один из рзработчиков языка, Роберт Иерузалимски, объяснял в одном из своих интервью то, что синтаксис Луа можно назвать компромиссным решением. Разработчики хотели, чтобы Lua могли осваивать не только профессионалы, но и начинающие специалисты, поэтому язык так легко учится и имеет весьма упрощенный синтаксис.

Лексика

Главным алфавитом ЯП Луа считается английский язык. В строковых литералах применяются символы из других ЯП. Идентификаторы состоят из букв, цифр, символа подчеркивания. Они никогда не начинаются с цифры и не имеют совпадений с одним из ключевых слов. Если обратиться к материалу по использованию Lua, то можно отметить, что разработчики не советуют работать с идентификаторами, которые начинаются с подчеркивания. Это обусловлено тем, что эти символы преимущественно необходимы для системных целей.

Эти ключевые слова не могут использоваться для имён:

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Типы данных

Луа считается языком программирования, который имеет неявное динамическое обозначение типов данных. Переменная в этом случае содержит значения любого типа. Значения в этом ЯП могут оставаться в переменных. При этом они используются как аргументы в случае вызова функций, а затем приходят на исходные позиции в качестве результата их выполнения. В языке программирования Луа имеется 8 главных типов.

Оператор присваивания (ОП)

ОП в Луа называют символ =. В этом языке программирования возможно использование параллельного присваивания, как и в других ЯП. Допустим, Python, Icon. В самом простом случае это позволяет создавать выражения такого вида:

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Если сравнить Луа с языком программирования Go, то станет ясно, что параллельное присваивание в Луа происходит проще. В этом случает не требуется полное соответствие числа переменных количеству значений. К примеру, если число значений и переменных разнится, то данные переменных могут отбрасываться (если значений больше). В обратном случае будет присваиваться тип nil.

Таблицы

Таблицы в Луа называют динамическим ассоциативным массивом. Иными словами, это большое количество пар, которые имеют вид «ключ-значение». В такой ситуации ключом может быть значение любых видов Луа, кроме nil. Иногда ключи бывают литералами. При записи nil в элементы таблицы подобное действие будет равносильно удалению выбранного элемента. Таблицы в Lua — это единственный составной тип данных. Их можно назвать базой и основой для всех пользовательских баз данных.

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Мультимножества создаются подобно массивам. Однако в этом случае в качестве значений берутся не логические, а целые числа соответствующих компонентов в множестве. Списки в это случае представляются в качестве массивов двухэлементных массивов, которые будут хранить значения и ссылку на другие компоненты.

Если речь идет о многомерных массивах, то они чаще всего реализовываются как массивы массивов. Если используются более многогранные и сложные элементы, то их реализация будет выполняться на основе таблиц. Вид реализации будет зависеть от типа задачи.

Метатаблицы

Метатаблицы в языке программирования Луа дают многие опции. По своим свойствам они похожи на обычные таблицы в Луа, которые имеют возможность соответствовать всем правилам и нормам. Главная особенность метатаблиц заключается в их использовании Этот элемент хранит различные метаданные типов и объектов.

Иными словами, в них находится информация, которая связана с опциями и параметрами типов и объектов Луа. Данные, которые содержатся в метатаблицах, могут применяться интерпретатором языка программирования. При их использовании функционал программных элементов может значительно расширяться.

Метатаблица в Луа связывается со значениями любого типа. Если речь идет о скалярных данных, то все они имеют цельные метатаблицы для любых видов. Значения типа userdata располагают индивидуальными ссылками на метатаблицы. Изменение метатаблиц всех видов происходит при помощи внешнего кода на С. Таким образом, из Луа будут доступны только метатаблицы таблиц.

Если сделать на этом языке программирования таблицу с самого начала, она не будет иметь метатаблицы. При этом метатаблицу в таком случае можно будет создать от других таблиц. За счет опции getmetatable происходит возвращение метатаблицы таблицы t.

При помощи опции setmetatable происходит установка для таблицы t метатаблицы m. Для метатаблиц в ЯП Луа предоставлен набор полей. Они могут применяться как интерпретатор языка. Чтобы указывать на особую роль имеющихся полей, для них используется правило именования. В этом случае идентификаторы начинаются с двух подчеркиваний.

Отдельные поля содержат данные о специфических свойствах объекта, в котором находится метатаблица. В Луа есть элемент, который обозначается как __mode. Если он будет задан, то таблица может стать слабой. При этом все ссылки на объекты тоже станут слабыми.

По значениям большей части доступных полей метатаблицы называют метаметодами. Это говорит о том, что имеются ссылки на функции, которые иногда вызывают интерпретаторы. Принцип работы метаметода выглядит так — при встрече интерпретатором в программе он будет обращен к связанной с операндом метатаблице. Далее он ищет необходимый метаметод и приводит его к вызову.

—[[ Создание операции сложения для таблиц ]]
— Операнды
t1 = <1,2,3>
t2 = <10,20,30>
— Создание метатаблицы
mt = <>
— Запись в метатаблицу метаметода «__add»
mt.__add = function(a, b)
local res = <>
for k in pairs(a) do res[k] = a[k] + b[k] end
return res
end
— Привязка метатаблицы к таблице t1
setmetatable(t1, mt)

В языке программирования Луа могут применяться все метаметоды для разных арифметических операций. Именно поэтому при помощи Lua можно проводить арифметику для любых объектов. В процессе идет работа как со стандартными, так и с библиотечными метаметодами (их поддержка происходит не ядром ЯП, а определенными библиотеками).

Главное значение в этом случае дает поле __index. Оно используется в тех случаях, когда интерпретатор читает данные таблицы, не может его найти.__index позволяет опираться на таблицы или на методы. Если происходит ссылка на таблицу, то интерпретатор найдет искомый элемент в таблице __index. В ином случае вместо работы с таблицей произойдет вызов этого метода. В Луа имеется возможность реализации наследования, анализа операций с таблицами.

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

Таблицы в языке программирования — это база для объектно-ориентированного программирования. Их можно назвать объектом в ООП. Это объясняется тем, что она имеет поля, которые именуются за счет идентификаторов. При этом таблицы хранят в полях произвольные значения и опции для осуществления поведения объекта. Некоторые синтаксические возможности языка программирования Луа дают описание и обращение с объектами более доступными для пользователей.. которые хорошо знают традиционные языки.

Программисты должны учитывать, что такого понятия, как «класс», в Луа не существует. В этом случае происходит описание отдельных компонентов, при этом все поля и методы будут относиться конкретно к нему.

Описание свойств происходит таким способом, как элементы таблицы с ключами. Методы в этом случае будут использоваться как поля-функции. Описание методов включает в себя указание в элементе «получателя». Этот тот элемент, который в случае вызова метода будет ссылаться на объекты, из-за которых и произошел вызов.

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

Реализация

Реализация в ЯП Луа имеет компилятор с исходного языка и виртуальную машину, которая приводит к работе сгенерированного байт-кода. Байт-коды в этом случае не являются командой сетевой машины. Они представлены как команды виртуального процессора с разными регистрами. Подобный процесс приводит к повышению эффективности исполнения.

В языке программирования Луа применяется единый строковый пул. Подобные действия снижают расход памяти на хранение строк. Если происходит работа с задачами, которые критичны по времени, имеется JIT-компилятор Луа. Также существует компилятор IIvm-lua, он имеет свойство генерировать код для виртуальной машины LLVM. Она переводит последующие компиляции в машинный код.

Работа с ошибками

Луа считается дополнительным языком, которые используется совместно с другими языками программирования. Все действия Луа берут свое начало из кода С в хвост-программе. Если происходит ошибка в процессе компиляции или в ходе выполнения порции Луа-кода, управление перейдет к хосту, который, в свою очередь, может выполнить соответствующие меры.

Допустим, дать сообщение об ошибке. Код Луа явно генерирует ошибки, вызывая при этом опцию error. При необходимости искать ошибки в языке программирования необходимо применять pcall или xpcall. Это необходимо для вызова функции в режиме защиты.

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

При обнаружении ошибки происходит распространение ее объекта. Он называется error message. Таким образом, язык программирования Луа генерирует только ошибки, чьим объектом называется строка. Программы при этом генерируют ошибки с любым значением в качестве объекта ошибки.

Если программист применяет xpcall и lua_pcall, ему можно задавать обработчик сообщений, который называется message handler. Он необходим для того, чтобы в дальнейшем получать сообщения об ошибках. Вызов этой опции происходит с исходным сообщением об ошибке. Возвращение в этом случае осуществляется с новым сообщением об ошибке. Подобная опция вызывается до того, как ошибка развернет стек. Таким образом, можно собрать больше сведений об ошибке.

Язык программирования lua для чего. Смотреть фото Язык программирования lua для чего. Смотреть картинку Язык программирования lua для чего. Картинка про Язык программирования lua для чего. Фото Язык программирования lua для чего

В подобных случаях может происходить проверка стека или создание трассировки стека. Этот обработчик сообщений будет действовать под охраной защищенного вызова. Ошибка внутри обработчика сообщений приведет к вызову обработчика сообщений. При продолжении этого цикла на протяжении долгого времени, Lua прерывает его и возвращает соответствующее сообщение.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *