]]> ]]>

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

IDE/Редакторы:

Примеры:

Факториал:

Пример для версий 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.0
print("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")

В закладки: ]]> Пиктограмма del.icio.us Пиктограмма БобрДобр.ru Пиктограмма Memori.ru Пиктограмма МоёМесто.ru ]]>