Главная страница

Язык программирования Lua. Учебник для начинающ... Учебник для начинающих Добавлено Чт янв 17, 2013 6 40 pm Заголовок сообщения


Скачать 473.96 Kb.
НазваниеУчебник для начинающих Добавлено Чт янв 17, 2013 6 40 pm Заголовок сообщения
АнкорЯзык программирования Lua. Учебник для начинающ.
Дата13.02.2018
Размер473.96 Kb.
Формат файлаpdf
Имя файлаYazyk_programmirovania_Lua_Uchebnik_dlya_nachinayusch.pdf
оригинальный pdf просмотр
ТипУчебник
#30872
страница1 из 4
Каталогid77691975

С этим файлом связано 46 файл(ов). Среди них: Khaos_i_kosmos_Sinergetika_evolyutsii.pdf, Большие биологические часы (введение в интеграл...doc, OS_RTEMS_Rukovodstvo_polzovatelya.pdf, Старение. Хаос.Фракталы.doc, Julia_Language_Documentation.pdf и ещё 36 файл(а).
Показать все связанные файлы
  1   2   3   4

Сообщения без ответов
|
Активные темы
Список форумов
»
FAQ, инструкции, книги по LUA и QLUA
Часовой пояс: UTC + 2 часа
Заголовок сообщения:
Язык программирования Lua. Учебник для начинающих
Добавлено: Чт янв 17, 2013 6:40 pm
Заголовок сообщения:
Re: Язык программирования Lua. Учебник для начинающих
Добавлено: Чт янв 17, 2013 6:41 pm
QLUA Forum
Форум QUIK Lua
Вход
Регистрация
FAQ
Поиск
Текущее время: Вт дек 02, 2014 12:44 am
Язык
программирования
Lua.
Учебник
для
начинающих
Страница 1 из 2
[ Сообщений: 16 ]
На страницу
1,
2
След.
Версия для печати
Пред. тема
|
След. тема
Автор
Сообщение
patch_ua
Зарегистрирован: Чт янв
17, 2013 2:57 pm
Сообщения: 757
Введение
Основным мотивом для написания этого текста стало отстутствие на просторах интернета какого-либо внятного учебника по Lua, для чайников и не только, причем на русском языке. Документация на русском есть, а с чего начать - непонятно. Есть хорошая книжка - "Programming in Lua"
(причем нужно именно 2-е издание), но ее почему-то даже в электронном виде нигде нет. Мне удалось найти только препринт 1-го издания, и разумеется на английском. После двухгодичной разработки скриптов для хабов на Lua стало ясно, что уж "для чайников" я и сам руководство сделаю. Через некоторое время после осознания этого факта появился черновик, который долгое время оставался совсем убогим и кратким, и вот только сейчас он становится похож на учебник. Отмечу также, что на просторах интернета много различных статей вида "как на Lua сделать что-то эдакое", но полного подробного учебника пока что не наблюдается.
Либо встречаются руководства для продвинутых, которые уже что-то знают и хотят "расшИрить и углУбить" (с) свои знания. Итак, приступим-с...
Disclaimer: это учебное описание языка Lua, а не полное руководство.
Некоторые аспекты излагаются с некоторой вольностью, чтобы не затмевать суть дела. Да простят меня за это великие умы мира сего.
ПС Не мое. Взял на big.vip-zone.su
Последний раз редактировалось
patch_ua
Чт янв 17, 2013 7:32 pm, всего редактировалось 3 раз(а).
Вернуться к началу
patch_ua
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 1 из 38 02.12.2014 2:48

Зарегистрирован: Чт янв
17, 2013 2:57 pm
Сообщения: 757
Обзор Lua
Lua -- относительно несложный и в то же время мощный язык, часто применяемый как средство расширения функциональности в многих приложениях, играх, и, что нам в данном случае более интересно, в
DC-хабах. В частности, он поддерживается в Verlihub (специальным плагином) и в PtokaX. Как и многие другие скриптовые языки, он позволяет выполнять код без предварительной компиляции (т.е. является интерпретируемым). С одной стороны, это часто ускоряет и упрощает разработку (изменил пару строчек, перезапустил, и всё), с другой стороны, некторые разновидности ошибок отлавливаются только в процессе выполнения данного куска кода. Скажем, вы вызываете функцию, которой не существует, или передаёте ей неверное количество параметров: если эта строчка в силу логики работы программы не выполнится, вы про свою ошибку даже не узнаете
А вот если выполнится, интерпретатор неприлично выругается. Такого почти не бывает в компилируемых языках, в которых код тщательно проверяется на стадии синтаксической проверки, компиляции или линковки.
В отличие например от Pascal, Lua не является строго типизированным языком. При инициализации переменных им не нужно указывать тип -- он сам разберется, а объявление переменных фактически не требуется, так как объявлением является присвоение значения. Преобразование из одного типа в другой часто происходит неявно, что упрощает читаемость программы. При этом для любой переменной можно в процессе выполнения узнать ее тип с помощют специального оператора. Более того, тип одной и той же переменной может быть изменен в процессе ее существования при присвоении нового значения (другого типа). Это явление называется динамической типизацией. В Lua (как, например, в javascript), имеется специальное значение nil (аналог null), означающее отсутствие 'содержательных' данных. Как и C/C++, Lua является регистро- чувствительным. Переменная AAA и aaa --- это разные переменные!
Примеры программ в данном тексте и интертрепация
Все приводимые ниже примеры вы можете проверить тут: Lua demo -- вставляете код в форму и жмёте кнопочку Run. Ниже образуется вторая форма с выводом вашей программы. Это возможно благодаря тому, что
Lua -- интерпретатор и не требует предварительной компиляции кода.
Однако для него есть и компилятор luac, который переваривает программу в некий байт-код, который уже быстрее разбирается интерпретатором, что ускоряет загрузку и выполнение программы.
Однако скорость выполнения самого скрипта в компилированном и в обычном виде примерно одинакова, в чем я предлагаю убедиться читателю самостоятельно.
В заголовке слово "интерпретация" не случайно было написано с опечаткой. Дело в том, что формально отделить компилируемые языки от интерпетируемых - занятие соврешенно бесперспективное, и степень "интерпретируемости" - это скорее какая-то вещественная (дробная)
характеристика от 0 до 1. Ведь даже программа на ассемблере (или,
давайте уж по полной - "машинный" код) тоже в известном смысле интерпретируется процессором! Так что по сути разница лишь в том, кто интерпретирует код -- железяка или программа (скажем виртуальная машина той же Java). С другой стороны, если зашить интерпретатор Lua в
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 2 из 38 02.12.2014 2:48
процессор (а почему нет, собственно?), компилятором он от этого не станет
Стандартная библиотека
За образец изложения информации о любом языке программирования я беру книгу Бьерна Страуструпа "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. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 3 из 38 02.12.2014 2:48
действительно очень немного (разумеется, если не учитывать функции стандартной библиотеки, коих имеется превеликое множество.
В предыдущем абзаце по сути дела не было упомянуто почти ни одного хитроумного слова, не знакомого человеку, который знает уже какой- нибудь язык программирования. За исключением, пожалуй, одного - загадочного слова мета-таблица. Как мы потом узнаем, в них скрывается вся соль Lua. Пока можно сказать, что это прежде всего, обычные таблицы, но кроме хранения данных они позволяют ещё и перегружать стандартные операции для таблиц, как это делается в С++ с помощью конструкции operator(). Если написанное Вам пока не понятно - не обращайте внимания. На некоторое время мы забудем про всю эту жуть и сначала разберем основы языка, которые, во-первых, элементарны, а во-вторых, очень похожи на базовые конструкции в других языках. Я не случайно ссылаюсь частенько на С/C++, так как многие читатели вполне могут его знать, и им будет проще. Что же касается мета-таблиц, то им будет посвящена целая отдельная глава.
Структура кода
В отличие от С++, Pascal и других строгих языков, в Lua исполнение кода программы начинается последовательно, если этот код не является телом функции. Отдельные конструкции языка разделяются пробелом с необязательной точкой с запятой в конце. Я по привычке их ставлю
Пример 0
Код:
1 -- это наша первая программа на
Lua
2 print("Hello from World!");
3 4 -- а
это функция
, которая не вызовется
5 function MyFunction()
6 print("Hello from Function!");
7 end
При запуске будет выведена только первая строка (Hello from World), так как функцию MyFunction никто не вызовет, и то что написано внутри, не выполнится.
Простейшие примеры
Сейчас мы разберем несколько простеньких программ, на которых я постараюсь доказать вам, что Lua -- это очень просто.
Пример 1: классический Hello world
Код:
1 print("Hello World!");
2
Я думаю, не надо пояснять, что она выведет;) В Lua не требуются всякого рода "точки входа" программы, как в C или Pascal. Исполнение скриптов начинается с первой строки, за исключением тел функций. Они
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 4 из 38 02.12.2014 2:48
выполняются тогда и только тогда, когда к ним происходит обращение.
Следующий пример чуть более содержателен:
Пример 2: переменные
Код:
1 a = 1;
2 print("
Ура
, я
научился использовать переменные
: a = "..a);
Что же выведет наша программа в примере 2? Между переменной a и строкой используется операция склейки (по-научному - конкатенации)
строк -- две точки подряд. Она выведет текст и значение переменной, то есть число 1. Не правда ли, всё просто?
Тут же следует сказать о том, что в Lua можно не использовать разделитель ; (точку с запятой) для разделения инструкций. Лично мне ее ставить привычнее, к тому же в С++ их всё равно приходится ставить - так зачем переучиваться? Поэтому я буду их использовать в своих примерах.
Кроме того, это вносит дополнительную наглядность.
Строковые константы в Lua можно писать как в двойных, так и в одинарных кавычках, как вам удобнее. Если в тексте встречаются кавычки
-- можете написать в апострофах, даже не придётся их экранировать символом \, как это приходится делать в C++. Например вот так:
Пример 3: строки
Код:
1 strApos = "
Строка с '
апострофами ' внутри ";
2 strQuot = '
Строка с "
кавычками " внтури ';
А как же быть, если нам надо по каким-то причинам написать строку, в которой (о ужас) есть и кавычки, и апострофы? В этом случае поможет только экранирование:
Пример 4: строковый винегрет
Код:
1 str = "
Строка с
\"
кавычками
\" и '
апострофами ' внутри ";
Если вам нужно осуществить перевод строки, или вставить какой-либо другой служебный символ, пишем так же, как это делается в С/C++.
Пример 5: переносы и табуляция в строках
Код:
1 print("
А
это строка
\n с
переносами
\n строк
.\n а
вот тут табуляция
\t и
ещё
\n один перенос
.");
Будет выведено следующее:
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 5 из 38 02.12.2014 2:48

Заголовок сообщения:
Re: Язык программирования Lua. Учебник для начинающих
Добавлено: Чт янв 17, 2013 6:51 pm
Вывод примера 5
Код:
1
А
это строка
2 с
переносами
3 строк
4 а
вот тут табуляция и
ещё
5 один перенос
На этом мы заканчиваем обзор и переходим к систематическому изложению. Наша программа на ближайшее будущее будет такой: вначале мы обсудим операции и типы данных, потом операторы языка, потом более детально познакомимся с объявлением переменных.
Вернуться к началу
patch_ua
Зарегистрирован: Чт янв
17, 2013 2:57 pm
Сообщения: 757
Типы данных: Основы
Простые типы
Сейчас мы кратко обсудим основные типы данных в Lua, не углубляясь в детали. Это нам потребуется для того, чтобы можно было сочинять более содержательные примеры. Позже мы вернемся к типам данных и переменным и особенностям их объявления.
Основными (и наиболее часто используемыми) типами данных в Lua являются числа, строки, логические значения, а также массивы и таблицы из этих значений. Явным образом тип данных никак не указывается - интерпретатор определяет его сам, поэтому многие простые конструкции можно писать чисто интуитивно, и это будет правильно.
Типы данных - введение
Код:
1 i=1; -- число
2 d=3.1415; -- тоже число
3 sum=i+d; -- сумма двух чисел
4 str="string"; -- строка
Больше ничего пока про простые типы я говорить не буду (сознательно) и предлагаю читателью больше пользоваться собственной интуицией при чтении примеров программ. В сложных языках (том же С/С++) это не всегда работает, а вот в Lua - очень даже. Вообще, приятно изучать язык,
в котором есть должная степень наглядности кода - он делает именно то,
что написано и ничего более, без особых ухищрений со стороны программиста.
Массивы и таблицы
Что такое массив, наверное всем понятно. Это набор данных одного и
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 6 из 38 02.12.2014 2:48
того же типа, занумерованный последовательностью целых чисел
(индексами) с "шагом" 1. Обычно индексация делается либо от 0 до N-1,
где N - количество элементов массива, либо от 1 до N. И тот и другой подход имеет свои плюсы и минусы; в более низкоуровневых языках вроде С/C++ применяется (и оказывается реально удобнее!) индексация с нуля, а вот в Lua "прижилась" индексация массивов с 1. Как мы потом узнаем, это всё не очень принципиально, и при правильном построении программ об этом вообще не приходится думать.
Как объявляются массивы и как с ними работать? Очень просто:
Типы данных - массивы
Код:
1 -- способ
1 2 array1={}; -- новый пустой массив
3 array1[1] = 'first element';
4 array1[2] = 'second element';
5 6 -- способ
2 7 array2={[1]='first', [2]='second'};
8 9 print(array1[1], array2[2]);
Как видите, всё очень наглядно. Размер массива можно узнать следующим образом:
Код:
print(#array1);
Более подробно о массивах, их размерах и других тонкостях мы поговорим в отдельной главе, а пока познакомимся с таблицами. Если читатель знаком, например, с С++ и библиотекой STL, то для него таблица "в первом приближении" - это стандартный контейнер std::map. Для "остальных смертных" придётся сказать, что таблица - это ассоциативный массив, представляющий собой множество пар { (key, value) }, для которого определена операция [] (получение элемента value по ключу key). Немного забегая вперед, скажем что массивы в Lua - это на самом деле тоже таблицы с числовыми значениями ключа key от 1 до размера массива.
Вышесказанное показалось вам слишком сложным и непонятным? Ничего страшного, это просто формальное определение интуитивно простых понятий. Сейчас мы рассмотрим пример и всё станет понятно. Например,
у нас есть телефонная записная книжка, в которой контактам сопоставлено (для простоты) по одному телефонному номеру. В Lua эту книжку можно было бы задать так:
Типы данных - таблицы
Код:
1 Phones = {
Язык программирования Lua. Учебник для начинающих QLUA Forum http://forum.qlua.org/topic9.html
Стр. 7 из 38 02.12.2014 2:48

Заголовок сообщения:
Re: Язык программирования Lua. Учебник для начинающих
Добавлено: Чт янв 17, 2013 6:56 pm
2 ['
Вася
Пупкин '] = '(495) 504–50–21',
3 ['
Изольда
Кшыштопопвжецкая '] = '2-12-85-06',
4 ['
МЧС
'] = '112',
5 }
В качестве индексов в таблицах можно использовать не только строки и числа, а вообще всё что угодно, в том числе другие таблицы. Обращаться к элементам можно по этим самым индексам. Само собой, при попытке взять элемент, которого не существует, вам вернется значение nil.
Для таблиц со строковыми ключами, которые записаны латинскими буквами и не содержат в себе пробелов (то есть по сути являются идентификаторами языка), можно использовать упрощенный синтаксис при обращении к элементам таблицы, делая ее похожей на структуру (или класс). А именно:
Таблицы: OOP-style
  1   2   3   4

перейти в каталог файлов
связь с админом