Lua
- Дата создания:
- 1993
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .lua
- Реализации и версии (свернуть все | развернуть все):
Lua (от португальского “луна”) — облегченный скриптовый язык c расширяемой семантикой.
Lua был создан и поддерживается представителями Pontifical Catholic University Рио-де-Жанейро. У него нет официального стандарта, и стандартом считается описание в руководстве пользователя.
В настоящее время Lua является самым популярным скриптовым языком в индустрии игр и используется в ряде приложений в других предметных областях.
Lua является сравнительно новым языком и позаимствовал черты и идеи из ряда более старых языков:
- синтаксис структур управления логикой программы — из Modula;
- семантику более поздних версий — из Scheme;
- концепцию локальных переменных — из C++;
- концепцию наличия единственной встроенной структуры данных, используемой несколькими способами — из Lisp;
- использование ассоциативных массивов — из SNOBOL;
- множественные присвоения и возвраты из функций — из CLU etc.
Основополагающим принципом Lua является расширяемость семантики, т.е. предоставление мета-механизмов для реализации переменного набора инструментов вместо предоставления фиксированного набора инструментов. Это позволяет языку быть небольшим и простым, в то же время сохраняя мощность. Таким образом, Lua можно считать мультипарадигменным языком, поскольку он позволяет вести разработку в различных стилях.
Lua поддерживает логические, числовые (по умолчанию — числа с плавающей точкой двойной точности) и строковые атомарные типы данных. Единственным “родным” сложным типом данных является таблица — гетерогенный ассоциативный массив, позволяющий использовать разные типы данных для разных пар ключей и значений. Функции являются объектами первого класса, т.е. ими можно манипулировать точно так же, как переменными, передавать и получать как аргументы и т.д.
Эти два основные свойства позволяют реализовывать многие структуры данных и принципы, доступные в других языках, при помощи использования разных типов данных для ключей и значений ассоциативного массива:
- структуры: используем строки (~ имена полей) как ключи и атомы любых нужных типов (~ значения полей) как значения; для этого случая Lua предоставляет специальный синтаксис, позволяющий обращаться к значениям полей по имени поля.
- массивы: используем целые числа (~ индексы) как ключи и атомы одного нужного типа (~ элементы массива) как значения.
- множества: элементы множества можно хранить либо как ключи, либо как значения;
- ассоциативные массивы: очевидно;
- пространства имен: таблица может использоваться для хранения функций и переменных, относящихся к определенной предметной области;
- прототипы: Lua поддерживает объектно-ориентированную парадигму, позвояля хранить функции и данные, описывающие один объект, в одной таблице. Это именно прототипы, а не классы, т.к. новые объекты создаются клонированием существующих или использованием методов фабрики объектов.
Lua компилируется в байт-код, исполняемый на виртуальной машине Lua. Lua — скриптовый язык, созданный для встраивания в другие языки, поэтому предоставляет C API.
Элементы синтаксиса:
| Комментарий до конца строки | -- |
|---|---|
| Комментарии, которые могут быть вложенными | --[[ ... ]] |
| Регистрозависимость | да |
| Присваивание значения переменной | = |
| Группировка выражений | ( ... ) |
| Блок | do ... end |
| Равенство | == |
| Неравенство | ~= |
| Сравнение | < > <= >= |
| Определение функции | function f(p1, p2) ... end |
| Вызов функции | f(a, b, ...) |
| Вызов функции без параметров | f() |
| Последовательность | ; или конец строки |
| Если - то | if condition then ... end |
| Если - то - иначе | if condition then ... else ... end |
| Цикл с предусловием | WHILE condition DO ... end |
| Цикл с постусловием | repeat ... until condition |
| Цикл for - next для диапазона целых чисел с инкрементом на 1 | for i = 1, 10 do ... end |
| Цикл for - next для диапазона целых чисел с декрементом на 1 | for i = 10, 1, -1 do ... end |
Логотип Lua
Ссылки:
Примеры:
Факториал:
Пример для версий Lua 5.0, Lua 5.1Используется рекурсивное определение факториала.
function factorial(n)
if (n == 0) then
return 1
else
return n * factorial(n - 1)
end
end
for n = 0, 16 do
io.write(n, "! = ", factorial(n), "\n")
end
Hello, World!:
Пример для версий Lua 5.0print("Hello, World!")
Числа Фибоначчи:
Пример для версий Lua 5.0Используется рекурсивное определение чисел Фибоначчи.
function fibonacci(n)
if n<3 then
return 1
else
return fibonacci(n-1) + fibonacci(n-2)
end
end
for n = 1, 16 do
io.write(fibonacci(n), ", ")
end
io.write("...\n")
Числа Фибоначчи:
Пример для версий Lua 5.0Вычисленные числа хранятся в ассоциативном массиве fib и извлекаются из него для вычисления следующих. По умолчанию ассоциативные массивы в Lua используют целочисленные ключи, начинающиеся с 1, поэтому команда fib = {1, 1} создает массив с индексами элементов 1 и 2.
fib = {1, 1}
for n = 3, 16 do
fib[n] = fib[n-1] + fib[n-2]
end
for n = 1, 16 do
io.write(fib[n], ", ")
end
io.write("...\n")
Комментарии
]]>blog comments powered by Disqus
]]>