
И так, выучить что-то, это не просто, особенно язык, пусть и язык программирования, это дело требует упорства и желания достичь конечного результата. Скажу сразу, если вы думаете, что просто прочитав гайд, вы сразу станете программистом, то вы ошибаетесь! Прочитав гайд, вы получите лишь теоретические знания, а это только базовая часть. Что бы стать программистом, вам кроме прочтения гайдов и туториалов, нужно будет наработать опыт решения тех или иных ситуаций.
Ну да ладно, в данном кратком гайде я изложил минимум того, что вам нужно будет знать для коддинга на Lua. Так что если вам крайне в лом читать огромную базу знаний на www.lua.ru, то вот вам более сжатый материал для изучения. Но каким бы сжатым и простым этот материал не был, он в любом случае ориентирован на человека, который хоть какое-то представление имеет о программировании и знает как минимум базовую часть. Ну или хотя бы что такое «интерпретатор» или «переменная».
В данном гайде я собрал только определения и некоторые примеры, самые основные теоретические знания, во втором документе я изложу все операторы, доступные в Lua. Ну, начнём с самого простого, поехали!
Лексические соглашения
Это надо бы знать, но если вдруг вам этот раздел не очень понятен, это не страшно.
Идентификаторы могут содержать буквы, цифры и символы подчеркивания и не могут начинаться с цифры.
Идентификаторы, начинающиеся с подчеркивания и состоящие только из заглавных букв, зарезервированы для внутреннего использования интерпретатором.
В идентификаторах различается верхний и нижний регистры букв.
Строковые литералы можно заключать в одинарные или двойные кавычки. В них можно использовать следующие специальные последовательности символов:
\n перевод строки (LF = 0x0a) \a bell \r возврат каретки (CR = 0x0d) \b backspace \t табуляция \f form feed \\ символ обратной косой черты \v вериткальная табуляция \" кавычка \[ левая квадратная скобка \' апостроф \] правая квадратная скобка \ddd символ с кодом ddd (десятичным) \0 символ с кодом 0 |
Если в конце строки исходного файла стоит символ обратной косой черты, то на следующей строке может быть продолжено определение строкового литерала, в который в этом месте вставится символ новой строки.
Строковые литералы можно также заключать в двойные квадратные скобки [[....]]. В этом случае литерал может быть определен на нескольких строках (символы перевода строки включаются в строковый литерал) и в нем не интерпретируются специальные последовательности символов.
Если непосредственно после символов '[[' идет перевод строки, то он не включается в строковый литерал.
В качестве ограничителей строки кроме двойных квадратных скобок может использоваться символ [===[ .... ]===] в котором между повторяющимися квадратными скобками расположено произвольное число знаков равенства (одинаковое для открывающего и закрывающего ограничителя).
Комментарий начинается символами '--' (два минуса подряд) и продолжается до конца строки. Если непосредственно после символов '--' идут символы '[[', то комментарий является многострочным и продолжается до символов ']]'. Многострочный комментарий может содержать вложенные пары символов [[....]]. В качестве ограничителей многострочных комментариев кроме двойных квадратных скобок может также использоваться символ [===[ .... ]===] в котором между повторяющимися квадратными скобками расположено произвольное число знаков равенства (одинаковое для открывающего и закрывающего ограничителя).
Типы данных
В Lua имеются следующие типы данных:
nil пусто boolean логический number числовой string строковый function функция userdata пользовательские данные thread поток table ассоциативный массив |
Тип nil соответствует отсутствию у переменной значения. Этому типу соответствует единственное значение nil.
Логический тип имеет два значения: true и false.
Значение nil рассматривается как false. Все остальные значения, включая число 0 и пустую строку, рассматриваются как логическое значение true.
Все числа представлены как вещественные числа двойной точности.
Строки представляют собой массивы 8-битных символов и могут содержать внутри себя символ с нулевым кодом. Все строки в Lua константные т.е. изменить содержимое существующей строки нельзя.
Функции можно присваивать переменным, передавать в функции в качестве аргумента, возвращать в качестве результата из функции и сохранять в таблицах.
Тип userdata соответствует нетипизированному указателю, по которому могут быть расположены произвольные данные. Программа на Lua не может непосредственно работать с такими данными (создавать, модифицировать их). Этому типу данных не соответствует никаких предопределенных операций кроме присваивания и сравнения на равенство. В то же время такие операции могут быть определены при помощи механизма метаметодов.
Тип thread соответствует независимо выполняемому потоку. Этот тип данных используется механизмом сопрограмм.
Тип table соответствует таблицам — ассоциативным массивам, которые можно индексировать любыми значениями и которые могут одновременно содержать значения произвольных типов.
Тип объекта, сохраненного в переменной можно выяснить, вызвав функцию type(). Эта функция возвращает строку, содержащую каноническое название типа: "nil", "number", "string", "boolean", "table", "function", "thread", "userdata".
Преобразования между числами и строками происходят автоматически в момент их использования в соответствующем контексте.
Арифметические операции подразумевают числовые аргументы и попытка выполнить такую операцию над строками приведет к преобразованию их в числа. Строковые операции, производимые над числами, приводят к их преобразованию в строку с помощью некоторого фиксированного форматного преобразования.
Можно также явно преобразовать объект в строку с помощью функции tostring() или в число с помощью функции tonumber(). Для большего контроля над процессом преобразования чисел в строки следует использовать функцию форматного преобразования.