Понедельник, 15 Октября 2018, 16:58

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [312]
Статьи об общих понятиях связанных с созданием игр.
Программирование [69]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [123]
Статьи о программах для создания игр, уроки и описания.
Софт [27]
Различные программы, в том числе в помощь игроделам.
2D-графика [11]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [10]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [94]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [69]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как часто вы играете на мобильных устройствах?
Всего ответов: 837
Главная » Статьи » Программирование

Lua. Туториал для начинающих. Часть 1
Без лишних отступлений сразу к делу.
--========================
§1. Комментарии.

Комментарии в Lua (да и в любом языке программирования в принципе) — это та часть кода, которая не читается языком. Чтобы там ни находилось, язык это не прочтёт. Для него этого в принципе не существует.
Обычно применяется для описания скрипта, чтобы другие знали, что он из себя представляет, а также для создания пометок, чтобы можно было быстро найти скрипт среди тысяч строк кода.
А также полезен для того, чтобы можно было убрать часть скрипта при этом с возможностью возврата.

--------------------

§1.1. Строчные комментарии.

В Lua выглядят следующим образом: два дефиса, стоящие друг к другу, — «--».

Пример:

Код
-- закомментировано

--------------------

§1.2. Многострочные комментарии.

По названию всё ясно — при помощи них можно комментировать сразу несколько строк. Начало — «--[[», а конец — «]]».

Пример:

Код
--[[закомментировано
в
несколько
строк
]]


Так ведь намного быстрее, не правда ли?

Код
-- это
-- займёт
-- намного
-- больше
-- времени


--------------------

§1.3. Комментирование части строки.

Иногда бывает полезно сделать и такое. А сделать это можно при помощи многострочных комментариев.

Пример:

Код
эта часть не закомментируется --[[а эта — закомментируется]] а вот эта уже нет

--========================
§2. Вывод текста в консоль.

Для тестирования эта вещь достаточно полезная. В интерпретаторе это функция print.

Пример:

Код
print("сообщение в консоль");


Достаточно элементарно.
--========================
§3. Типы данных в Lua.

Их всего восемь:
1. nil — абсолютное ничего. Означает отсутствие данных. Иногда появление nil может быть чревато ошибками.
2. boolean — логический тип данных. К нему относятся true (истина) и false (ложь). При выполнении логических операций false равнозначен nil.
3. number — и так всё прекрасно понятно. Десятичный разделитель в Lua — точка. В остальном проблем не должно возникнуть.
4. string — строка. Это отдельные параграф.
5. function — функция. Также отдельный параграф.
6. table — таблица. И снова отдельный параграф.
7. userdata — пользовательские данные.
8. thread — поток.

--------------------

§3.1. Определение типов данных.

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

Пример:

Код
a = 1; -- присваиваем переменной a тип данных number
print(type(a)) -- напечатается «number».


Все возможные строки, которые эта функция возвращает: «nil» (как строка, а не значение nil), «number», «string», «boolean», «table», «function», «thread» и «userdata».
--========================
§4. Несколько полезных базовых функций Lua.

dofile() — открывает файл по указанному пути и выполняет его содержимое как Lua задачу.
В скобках в кавычках должен быть написан путь до файла, его имя и, конечно же, расширение, потому что расширение файла может быть не *.lua, а любым другим, но при этом внутри него будут коды на Lua.
Путь должен должен быть записан в кавычках.

Пример:

Код
dofile("data/scripts/Main.lua");
dofile("data/configs/config.cfg");


tonumber() — преобразует переменную в число. Не очень понимаю, как это работает. Если параметр уже является числом или строкой, конвертируемой в число, то tonumber() возвращает это число, иначе возвращает nil.
Основание может быть любым целым числом в диапазоне от 2 до 36 включительно.
Если основание больше 10, то символ «A» (как в верхнем, так и в нижнем регистре) представляет 10, «B» представляет 11 и так далее, символ «Z» представляет 35. При основании 10 (по умолчанию),
число может быть представлено в экспоненциальной форме.
Для других оснований можно указывать только беззнаковые целые числа.

_VERSION — глобальная переменная (не функция), возвращающая строку с версией интерпретатора.

Пример:

Код
-- при вызове этой переменной на самой последней официальной версии Lua эта перменная возвращает следующее:
print(_VERSION); -- Lua 5.3.1

--========================
§5. Числовые выражения.

Их здесь всего не четыре, как учили в школе, а шесть:
+
-
*
/
% (остаток от деления)
^ (возведение в степень)

Примеры:

Код
a = 1 + 2;
b = (1 * 3) / 10;
c = 2 - 2;
d = 10 % 1;
e = 5 ^ 5;


Для более корректных вычислений можно применять скобки.
--========================
§6. Логические выражения.
Предисловие.

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

--------------------

§6.1. Логические операторы.

Прежде чем переходить к изучению логических выражений (по-простому — условий), надо бегло пройтись по условным операторам. Вот все они:

not (не);
and (и);
or (или);
== (равно);
~= (не равно) вместо привычного многим !=;
> (больше);
< (меньше);
>= (больше или равно);
<= (меньше или равно).

--------------------

§6.2. Простейшие условия.

Самое простое условие выглядит так:

Синтаксис:
Код
if ... then  
  ...  
end


Не стоит ничего объяснять — на примере всё станет понятно:

Пример:

Код
if a then -- если переменная «а» существует  
  a = 1; -- тогда переменная имеет значение 1.  
end -- конец


Запись «if a then» эквивалентна «if a ~= nil then» (если «а» не равна nil). То есть просто идёт проверка на существование переменной в принципе.

--------------------

§6.3. Условия с «else».

«else» выполняет другое действие, если условие c «if» не выполнилось.
Пример:

Код
a = 1;
if a == 1 then -- если переменная «а» равна единице  
  print("a is 1"); -- тогда..  
else -- если не выполнится  
  print("a is not 1"); -- тогда...  
end -- конец


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

--------------------

§6.4. Условия с «elseif».

Блок «elseif» выполняет ряд других условий (или только одно), если предыдущие (или только одно) не выполнились.

Пример:

Код
if a > 2 then -- если а больше двух  
  a = 3; -- тогда а равна трём  
elseif a < 2 then -- если же а меньше двух  
  a = 1; -- тогда а равна единице  
else -- иначе  
  a = nil; -- тогда удалить а  
end -- конец


Тут можно сразу вставить блок «else».
Блоков elseif может быть сколько угодно много. Располагаются они всегда после if и перед else (если он есть).

--------------------

§6.5. Оператор not.

Долго о нём разглагольствовать не надо. Просто отрицание какой-либо операции.
Пример:

Код
if not a > 4 then  
  ...  
end


Хотя в данном примере лучше not a > 4 заменить на a <= 4.

Рассмотрим другой пример:

Код
if not a then
  ...
end


Здесь проверятся несуществование переменной a. В данном случае эта переменная не указана, соответственно, условие выполнится.

--------------------

§6.6. Несколько условий в одном if/elseif.

Для этого есть операторы and и or:

Код
if a and b and c then  
  ...  
end


Ни a, ни b, ни c не должны быть равны nil в данном примере. Если хоть одна переменная окажется равной nil, условие не выполнится.

Другое дело с or:

Код
if a or b or c then  
  ...  
end


Условие не выполнится только в том случае, если все три переменные окажутся равны nil. Если хотя бы одна переменная окажется не равной nil, то условие выполнится.

Также бывают случаи, когда необходимо исключить из условия сразу несколько переменных, например a и c. Можно конечно сделать так:

Код
if not a and not b and c then  
  ...  
end


Но есть более упрощённый вариант — использовать скобки:

Код
if not (a and b) and c then  
  ...  
end


Так же можно поступить и с or:

Код
if not (a or b) and c then  
  ...
end


С подобными вполне конструкциями можно поэкспериментировать.

А с elseif всё абсолютно идентично.

--------------------

§6.7. Функция rawequal.

Дополнительная функция, поверяющая равенство двух переменных. Возвращает тип данных boolean.

Пример:

Код
a = 1;
b = 1;

if rawequal(a,b) == true then
  print(a+b); -- 2
end


Эквивалентно:

Код
a = 1;  
b = 1;  

if a == b then  
  print(a+b); -- 2  
end

--========================
§7. Область видимости переменных.

--------------------

§7.1. Глобальные переменные.

Это присваивание переменной какого-либо значения до тех пор, пока ей не присвоится какое-либо другое значение:

Код
abc = 15;  
a = b;  
ght = f;


Можно записывать сразу несколько переменных:

Код
x,y = y,x;  
1,2,3 = 3,2,1;  
a,b,c,d,e,f,g = g,f,e,d,c,b,a;  
d,j,t = s,l,m;


Пример:

Код
a = 1;  
b = 2;  

if a == 1 then  
  a = b;
end  

if rawequal(a,b) then  
  print(a); -- 2  
end


--------------------

§7.2. Локальные переменные.

Отличаются от глобальных тем, что локальная переменная может принимать любое значение, а для глобального присвоение присваиваемое значение должно при этом существовать как переменная.
Также присваивание теряется, дойдя до ближайшего end либо else, либо elseif. Если объявить переменную вне всяких выражений, она останется навсегда. Объявляется с помощью оператора local:

Код
local a1 = a; -- переменная а на какое-то время имеет значение a1
local a1,b1,c1 = a,b,c;


Не следует забывать, что перед знаком равно пишется значение, которое присваивается переменной, а после — сама переменная.

К этому оператору ещё вернёмся.

Как уже было сказано выше, локальные переменные объявляются на время скрипта:

Пример:

Код
var = 45;  
if var then
  local v = var;
  print(v);  
end -- всё, var больше не имеет значения v


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

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

Продолжение следует...
Категория: Программирование | Добавил: TranZIt (27 Июня 2016)
Просмотров: 7512 | Комментарии: 6 | Рейтинг: 4.6/11 |
Теги: туториал, для новичков, уроки, язык программирования, Программирование, кратко и понятно, основы, Скриптование, с подробными примерами, LUA
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Lua. Туториал для начинающих. Часть 1», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 6
+0-
6 Vi   (24 Апреля 2018 16:16)
Также бывают случаи, когда необходимо исключить из условия сразу несколько переменных, например a и c. Можно конечно сделать так:

Код
if not a and not b and c then
...
end

Но есть более упрощённый вариант — использовать скобки:

Код
if not (a and b) and c then // not (aorb) and c
...
end

Так же можно поступить и с or:

Код
if not (a or b) and c then -- not (a [color=blue]andb)or[color=blue] c
...
end

С подобными вполне конструкциями можно поэкспериментировать.

+0-
5 Ghost_Reporting   (09 Апреля 2017 10:33)
Ghost_Reportingcrazy Может пригодиться!

+0-
3 Aevien   (10 Июля 2016 13:49)
AevienОтличная статья для тех кто не хочет копать книги для того чтобы не язык понять, а просто узнать терминологию языка. Мне очень полезна статья. :) Спасибо!

+0-
4 TranZIt   (12 Июля 2016 21:21)
Рад, что не зря писал. Спасибо за хороший отзыв!

+0-
1 8Observer8   (04 Июля 2016 14:18)
Бывает, что в начале (или в конце) приводят список литературы. Если есть желание, то добавьте.

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

+2-
2 TranZIt   (05 Июля 2016 23:00)
Хороший совет. Возможно, когда-нибудь будет сделано.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • RiBox3D
  • SMBX
  • IKEMEN
  • PointJS
  • Explorations
  • EDGE
  • Lumberyard
  • Silent Walk FPS Creator
  • Quest Soft Player
  • Haaf's Game Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2018 Рейтинг