Язык программирования Lua. Учебник для начинающих. Зарегистрирован: Чт янв 17, 2013 2:57 pm. Сообщения: 768.
Основным мотивом для написания этого текста стало отстутствие на просторах интернета какого-либо внятного учебника по Lua, для чайников и не только, причем на русском языке. Документация на русском есть, а с чего начать - непонятно. Есть хорошая книжка - "Programming in Lua" (причем нужно именно 2-е издание), но ее почему-то даже в электронном виде нигде нет. Мне удалось найти только препринт 1-го издания, и разумеется на английском. После двухгодичной разработки скриптов для хабов на Lua стало ясно, что уж "для чайников" я и сам руководство сделаю. Через некоторое время после осознания этого факта появился черновик, который долгое время оставался совсем убогим и кратким, и вот только сейчас он становится похож на учебник.
Для всех, кто хотел разобраться с Lua (скриптовый язык для разработки игр и не только, Ps для PHP или Python, такой учебник явно превратится в рулон). Rust, дисциплинирующий язык программирования (10). Язык программирования Lua. Учебник для начинающих QLUA Forum : сообщество разработчиков торговых роботов на Lua для Quik. Вводный урок по разработки скриптов Lua для garry's mod. Курс начинающего программиста от Школы Программирования урок 1.1 - Duration : 55:27. by Alex J 54,768 Какой язык программирования изучать? В этой серии уроков, которую я задумал, будет обсуждаться язык программирования Lua. Я постараюсь сделать изложение как можно.
Lua Language с нуля, Изучение языка программирования LUA для Хочу совета в том, как постепенно шаг за шагом изучать LUA. Здравствуйте, уже 2-ой день ищу в гугле, на форумах учебник по Lua. Я нашёл только Книжка написана автором языка Lua, очень легко и занимательно читается. Говорят, третье Руководство по языку программирования Lua.
Отмечу также, что на просторах интернета много различных статей вида "как на Lua сделать что-то эдакое", но полного подробного учебника пока что не наблюдается. Либо встречаются руководства для продвинутых, которые уже что-то знают и хотят "расшИрить и углУбить" (с) свои знания. Итак, приступим-с.
Зарегистрирован: Чт янв 17, 2013 2:57 pm. Сообщения: 768. Lua -- относительно несложный и в то же время мощный язык, часто применяемый как средство расширения функциональности в многих приложениях, играх, и, что нам в данном случае более интересно, в DC-хабах. В частности, он поддерживается в Verlihub (специальным плагином) и в PtokaX. Как и многие другие скриптовые языки, он позволяет выполнять код без предварительной компиляции (т. является интерпретируемым).
С одной стороны, это часто ускоряет и упрощает разработку (изменил пару строчек, перезапустил, и всё), с другой стороны, некторые разновидности ошибок отлавливаются только в процессе выполнения данного куска кода. Скажем, вы вызываете функцию, которой не существует, или передаёте ей неверное количество параметров: если эта строчка в силу логики работы программы не выполнится, вы про свою ошибку даже не узнаете А вот если выполнится, интерпретатор неприлично выругается. Такого почти не бывает в компилируемых языках, в которых код тщательно проверяется на стадии синтаксической проверки, компиляции или линковки. В отличие например от Pascal, Lua не является строго типизированным языком.
При инициализации переменных им не нужно указывать тип -- он сам разберется, а объявление переменных фактически не требуется, так как объявлением является присвоение значения. Преобразование из одного типа в другой часто происходит неявно, что упрощает читаемость программы.
При этом для любой переменной можно в процессе выполнения узнать ее тип с помощют специального оператора. Более того, тип одной и той же переменной может быть изменен в процессе ее существования при присвоении нового значения (другого типа). Это явление называется динамической типизацией. В Lua (как, например, в javascript), имеется специальное значение nil (аналог null), означающее отсутствие 'содержательных' данных.
Как и C/C++, Lua является регистро-чувствительным. Переменная AAA и aaa --- это разные переменные. Примеры программ в данном тексте и интертрепация. Все приводимые ниже примеры вы можете проверить тут: Lua demo -- вставляете код в форму и жмёте кнопочку Run.
Ниже образуется вторая форма с выводом вашей программы. Это возможно благодаря тому, что Lua -- интерпретатор и не требует предварительной компиляции кода. Однако для него есть и компилятор luac, который переваривает программу в некий байт-код, который уже быстрее разбирается интерпретатором, что ускоряет загрузку и выполнение программы. Однако скорость выполнения самого скрипта в компилированном и в обычном виде примерно одинакова, в чем я предлагаю убедиться читателю самостоятельно.
В заголовке слово "интерпретация" не случайно было написано с опечаткой. Дело в том, что формально отделить компилируемые языки от интерпетируемых - занятие соврешенно бесперспективное, и степень "интерпретируемости" - это скорее какая-то вещественная (дробная) характеристика от 0 до 1. Ведь даже программа на ассемблере (или, давайте уж по полной - "машинный" код) тоже в известном смысле интерпретируется процессором! Так что по сути разница лишь в том, кто интерпретирует код -- железяка или программа (скажем виртуальная машина той же Java). С другой стороны, если зашить интерпретатор Lua в процессор (а почему нет, собственно?), компилятором он от этого не станет. Стандартная библиотека. За образец изложения информации о любом языке программирования я беру книгу Бьерна Страуструпа "The C++ Programming Language", в которой, если я не ошибаюсь, ни разу не упоминается ни одна конкретная операционная система или какая-нибудь библиотека ввода-вывода, которая имеет право иметь различную реализацию (или отсутствовать вовсе!) в различных реализациях языка и в разных ОС.
Поэтому я стараюсь минимизировать использование функций, которые могут существенно зависеть от ОС - ведь никто не знает, на каких системах возьмется писать программу кто-нибудь из читателей. Досадное исключение - функция print, которая осуществляет вывод на консоль (а точнее - на стандартный поток вывода stdout), который, к счастью, в том или ином виде присутствует в большинстве ОС. Следует также отметить и такую особенность Lua. Он часто используется как встроенный язык для написания различных расширений, плагинов и тд.
В этих случаях у нас вообще, как правило, нет возможности отлаживать нашу программу с помощью print-ов, так как ее вывод зачастую может подавляться. Например, при отладке скриптов для DC-хабов удобно использовать отладочную печать в виде сообщений пользователям хаба (чат хаба используется как консоль вывода). Но это только один из примеров; если читатель сразу возьмется за применение Lua в качестве embedded-языка, пусть подберет себе способ для вывода отладочных сообщений вместо print. По тем же соображениям мы вообще не будем рассматривать такие например операции, как ввод данных с клавиатуры, так как их реализация не имеет ничего общего в различных операционных системах. Файловый же ввод-вывод чуть более стандартизован (и самое главное, бывает нужен в приложениях), поэтому его мы всё-таки коснемся в соответствующей главе. То же самое относится к аргументам командной строки программы.
Элементы и особенности языка. Как и в большинстве языков, в Lua есть переменные, операции (арифметические, строковые, и тд), операторы (циклы, ветвление), функции (то есть именованные подпрограммы с параметрами), и библиотека стандартных функций, обеспечивающих взаимодействие программы с ОС и некоторые другие стандартные действия. Оператор цикла for чаще всего используется как конструкция for each и очень применяется для выполнения операций над массивами (таблицами и мета-таблицами), хотя он допускает и классический арифметический вариант с переменной-счётчиком. Циклы while и repeat-until полностью аналогичны большинству языков. Оператор ветвления if допускает секцию elseif, тем самым фактически делает ненужным оператор выбора (case, switch, case of). Как и в C/C++, в Lua нету различий между процедурами и функциями, и те и другие декларируются ключевым словом function, а возвращаемое значение и его тип определяется внутри кода самой функции инструкцией return.
И я не сильно ошибусь, если скажу что на этом список ключевых слов языка практически исчерпывается - их действительно очень немного (разумеется, если не учитывать функции стандартной библиотеки, коих имеется превеликое множество. В предыдущем абзаце по сути дела не было упомянуто почти ни одного хитроумного слова, не знакомого человеку, который знает уже какой-нибудь язык программирования. За исключением, пожалуй, одного - загадочного слова мета-таблица. Как мы потом узнаем, в них скрывается вся соль Lua. Пока можно сказать, что это прежде всего, обычные таблицы, но кроме хранения данных они позволяют ещё и перегружать стандартные операции для таблиц, как это делается в С++ с помощью конструкции operator(). Если написанное Вам пока не понятно - не обращайте внимания. На некоторое время мы забудем про всю эту жуть и сначала разберем основы языка, которые, во-первых, элементарны, а во-вторых, очень похожи на базовые конструкции в других языках.
Я не случайно ссылаюсь частенько на С/C++, так как многие читатели вполне могут его знать, и им будет проще. Что же касается мета-таблиц, то им будет посвящена целая отдельная глава. Структура кода. В отличие от С++, Pascal и других строгих языков, в Lua исполнение кода программы начинается последовательно, если этот код не является телом функции. Отдельные конструкции языка разделяются пробелом с необязательной точкой с запятой в конце. Я по привычке их ставлю. 1 -- это наша первая программа на Lua.
2 print("Hello from World!");. 4 -- а это функция, которая не вызовется. 5 function MyFunction(). 6 print("Hello from Function!");. При запуске будет выведена только первая строка (Hello from World), так как функцию MyFunction никто не вызовет, и то что написано внутри, не выполнится. Простейшие примеры.
Сейчас мы разберем несколько простеньких программ, на которых я постараюсь доказать вам, что Lua -- это очень просто. Пример 1: классический Hello world. 1 print("Hello World!");. Я думаю, не надо пояснять, что она выведет;) В Lua не требуются всякого рода "точки входа" программы, как в C или Pascal. Исполнение скриптов начинается с первой строки, за исключением тел функций. Они выполняются тогда и только тогда, когда к ним происходит обращение.
Следующий пример чуть более содержателен:. Пример 2: переменные.
2 print("Ура, я научился использовать переменные: a = ". a);.
Что же выведет наша программа в примере 2? Между переменной a и строкой используется операция склейки (по-научному - конкатенации) строк -- две точки подряд. Она выведет текст и значение переменной, то есть число 1. Не правда ли, всё просто. Тут же следует сказать о том, что в Lua можно не использовать разделитель ; (точку с запятой) для разделения инструкций.
Лично мне ее ставить привычнее, к тому же в С++ их всё равно приходится ставить - так зачем переучиваться? Поэтому я буду их использовать в своих примерах. Кроме того, это вносит дополнительную наглядность.
Строковые константы в Lua можно писать как в двойных, так и в одинарных кавычках, как вам удобнее. Если в тексте встречаются кавычки -- можете написать в апострофах, даже не придётся их экранировать символом , как это приходится делать в C++. Например вот так:.
Пример 3: строки. 1 strApos = "Строка с 'апострофами' внутри";.
2 strQuot = 'Строка с "кавычками" внтури';. А как же быть, если нам надо по каким-то причинам написать строку, в которой (о ужас) есть и кавычки, и апострофы? В этом случае поможет только экранирование:. Пример 4: строковый винегрет.