Команда (фрилансеры)

Набираем команду фрилансеров, Вы:

  • Программист,
  • Дизайнер,
  • SEO-специалист,
  • Менеджер

Разработка на заказ

Наша команда фрилансеров выполнит
работы на заказ:

Создание и раскрутка сайтов
Разработка приложений (мобайл, десктоп, сервер)
Разработка игр (веб, мобайл, 3D)
Аутсорсинг, фриланс

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений
Сайт на C++
Наш сайт работает на C++ и это очень круто! =))

Язык программирования Lua для начинающих

Lua — скриптовый язык программирования, разработанный в Бразилии. Интерпретатор языка свободно распространяется (исходники на языке Си).

Идеологически Lua ближе всего к JavaScript, он также реализует прототипную модель ООП (ужос какой-то =) ). Все составные пользовательские типы данных (массивы, структуры, множества, очереди, списки) реализуются через механизм таблиц (прикольно), а ООП - через метатаблицы. В Lua есть множественное наследование! Вау! =)

Язык регистро-зависимый.

Комментарии в Lua

Для комментариев используется синтаксис, близкий к SQL:

-- Простой однострочный комментарий в Lua начинаются с двойного дефиса и продолжается до конца строки.

--[[Многострочный комментарий начинается с двойного дефиса и двух открывающихся квадратных скобок
  и продолжается до двух подряд закрывающихся квадратных скобок. Как здесь: ]] 

Типы данных

Lua - язык с неявным динамическим определением типов данных. Переменная может содержать значения любого типа.

В Lua восемь основных типов: nil (неопределенный), boolean (логический), number (числовой), string (строковый), function (функция), userdata (пользовательские данные), thread (поток), table (таблица).

Операции

Оператором присваивания служит символ =, возможно параллельное присваивание, например:

x, y = y, x

Операторы сравнения: <, >, <=, >=, ==, ~= (последний - сравнение на неравенство, круто блин =) ).

Логические операторы: and, or, not

Арифметические операторы: + - * / % ^ (последний - возведение в степень).

Таблицы

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

Как уже писали выше, через таблицы реализуются все составные пользовательские типы данных (массивы, структуры, множества, очереди, списки), например:

-- Таблица общего вида:
empty = {} -- Пустая таблица
empty[1] = "первый"        -- Добавление элемента с целым индексом
empty[3] = "второй"        -- Добавление элемента с целым индексом
empty["третий"] = "третий" -- Добавление элемента со строковым индексом
empty[1] = nil             -- Удаление элемента из таблицы  

Удаление элемента из таблицы - это просто нечто =).

-- Классический массив - строки индексируются по умолчанию целыми числами, начиная с 1
days1 = {"понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"}

-- Массив с произвольной индексацией
days2 = {[0]="воскресенье", [1]="понедельник", [2]="вторник", [3]="среда", [4]="четверг", [5]="пятница", [6]="суббота"}

-- Запись (структура) - значения различных типов индексируются литералами
person = {tabnum = 123342,                   -- Табельный номер
          fio = "Иванов Степан Васильевич",  -- Ф.И.О.
          post = "слесарь-инструментальщик", -- Должность
          salary = 25800.45,                 -- Оклад
          sdate = "23.10.2013",              -- Дата приёма на работу
          bdate = "08.08.1973"}              -- Дата рождения 

pfio = person.fio --Обращение к элементу структуры.

-- Множество - индексы используются для хранения значений
workDays = {["понедельник"]=true, ["вторник"]=true, ["среда"]=true, ["четверг"]=true, ["пятница"]=true}
workDays["суббота"] = true -- Добавление субботы в число рабочих дней
workDays["среда"] = nil    -- По средам больше не работаем

-- Проверка, является ли d рабочим днём
if workDays[d] then 
  print (d.." - рабочий день")
else
  print (d.." - выходной день")
end

Замыкания

Lua поддерживает замыканий, например:

function makeaddfunc(x)
	return function(y)
		return x + y
	end
end
plustwo = makeaddfunc(2)
print(plustwo(5)) -- Выводит 7

ООП

В Lua нет классов. Основой для ООП в Lua являются объекты, которые в свою очередь, также являются таблицами.

Итак, описывается отдельный объект, все свойства и методы, которые относятся к нему. Свойства - это элементы таблицы с ключами-идентификаторами, методы — как поля-функции. В теле метода сам объект доступен с помощью self:

-- Объект
Account = {                     -- Объект "счёт"
  balance=0,                    -- свойства объекта: номер, название, баланс
  credit = function (self, v)   -- метод "расход" - описание внутри объекта с явным указанием получателя
    if self.balance < v then error "Недостаточно денег на счёте" end
    self.balance = self.balance - v
  end
}

function Account:debet(v)       -- метод "приход" - внешнее сокращённое описание (self не указывается)
  self.balance = self.balance + v
end

Account.debet(Account, 10000)   -- вызов метода - полный вариант
Account:credit(5000)            -- вызов метода - сокращённый вариант

Примеры кода

«Hello, world!» на Lua:

print("Hello World!")

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

function factorial(n)
  if n == 0 then
    return 1
  else
    return n * factorial(n - 1)
  end
end

Цикл while:

num = 1
while num <= 5 do
	-- Statements
	num = num + 1
end

Такой же цикл только через for:

for i = 1,5 do
     -- Statements
end

Модифицируем поведение функции print:

do
  local oldprint = print   -- Сохраняем текущую функцию print как oldprint
  function print(s)        -- Переопределяем функцию print
    if s == "foo" then
      oldprint("bar")
    else
      oldprint(s)
    end
  end
end

Любой последующий вызов print будет взывать новую функцию.

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


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Концепция SITEV.ru

SITEV.ru - это социальная сеть для ИТ-специалистов (программистов, дизайнеров, seo-специалистов, рекламных менеджеров, маркетологов), в том числе фрилансеров, бизнесменов... а также обычных пользователей, для которых и делается ИТ