1. Введение в Lua: окружение, переменные и управляющие конструкции
Введение в Lua: окружение, переменные и управляющие конструкции
Добро пожаловать в курс «Основы языка программирования Lua». Это первая статья, с которой начнется ваше погружение в мир одного из самых элегантных и быстрых скриптовых языков программирования. Lua (в переводе с португальского — «Луна») был создан в 1993 году в Папском католическом университете Рио-де-Жанейро. Сегодня он используется повсюду: от разработки игр (Roblox, World of Warcraft) до встраиваемых систем и конфигурации сложного программного обеспечения.
В этой статье мы разберем, как подготовить рабочее окружение, изучим базовый синтаксис, работу с переменными и научимся управлять потоком выполнения программы.
Почему Lua?
Прежде чем писать код, важно понять философию языка. Lua проектировался как встраиваемый язык. Это означает, что он часто работает не сам по себе, а внутри другой большой программы (написанной, например, на C или C++), управляя её логикой.
!Схема взаимодействия движка на C++ и скриптов на Lua, показывающая роль языка как связующего звена.
Основные преимущества Lua: * Компактность: Весь интерпретатор занимает сотни килобайт. * Скорость: Lua считается одним из самых быстрых интерпретируемых языков, особенно при использовании JIT-компиляции (LuaJIT). * Простота: Синтаксис минималистичен и интуитивно понятен.
Установка и окружение
Чтобы начать программировать на Lua, вам понадобится интерпретатор. Это программа, которая читает ваш код и выполняет его.
Варианты запуска
choco install lua).
* macOS: Используйте Homebrew: brew install lua.
* Linux: Обычно Lua доступен в репозиториях: sudo apt install lua5.3 (или новее).После установки откройте терминал (командную строку) и введите lua. Если вы увидите приветственное сообщение и версию языка, значит, всё работает. Вы попали в интерактивный режим.
Попробуйте ввести первую команду:
Нажмите Enter. Система ответит вам выводом текста на экран. Поздравляем, ваша первая программа написана!
Для написания больших программ интерактивный режим неудобен. Обычно код пишут в текстовом файле с расширением .lua (например, script.lua), а затем запускают его через терминал командой:
Основы синтаксиса и комментарии
Lua — язык с динамической типизацией и свободным форматом. Это значит, что вам не нужно заранее объявлять типы переменных, а пробелы и переносы строк (в разумных пределах) не влияют на выполнение.
Важная особенность: точка с запятой ; в конце строк не обязательна. Вы можете ставить её для разделения нескольких команд на одной строке, но обычно её опускают.
Комментарии
Хороший код должен быть понятен не только машине, но и человеку. Для этого используются комментарии, которые игнорируются интерпретатором.
* Однострочный комментарий начинается с двух дефисов --.
* Многострочный комментарий начинается с --[[ и заканчивается ]].
Переменные и типы данных
В Lua переменные не имеют типа, тип имеют только значения. Это фундаментальное отличие от языков вроде C++ или Java.
Глобальные и локальные переменные
По умолчанию все переменные в Lua — глобальные. Это одна из особенностей, за которую новичков часто ругают опытные разработчики. Глобальные переменные видны во всей программе, что может привести к ошибкам.
Чтобы создать переменную, ограниченную текущим блоком кода (файлом, функцией или циклом), используется ключевое слово local. Всегда старайтесь использовать local, если нет веской причины делать переменную глобальной.
Базовые типы данных
Lua имеет всего 8 базовых типов. Сегодня мы рассмотрим самые важные из них для старта.
nil. Означает отсутствие значения. Если вы обратитесь к переменной, которую не создавали, вы получите nil. Присваивание переменной nil удаляет её.true (истина) и false (ложь).false и nil считаются ложью. Ноль 0 и пустая строка "" считаются истиной (true). Это частая ловушка для программистов, пришедших из C или Python.
' или двойные " кавычки.Пример работы с типами:
Операторы
Lua поддерживает стандартный набор операторов.
Арифметические операторы
* + (сложение)
* - (вычитание)
(умножение)
* / (деление)
* // (целочисленное деление, отбрасывает дробную часть, доступно в Lua 5.3+)
* % (остаток от деления)
* ^ (возведение в степень)
Математически операцию остатка от деления можно представить так:
Где — остаток, — делимое, — делитель, а — операция округления вниз до ближайшего целого.
Операторы сравнения
Они всегда возвращают true или false.
* == (равно)
* ~= (не равно) — обратите внимание, в Lua используется тильда, а не восклицательный знак !=.
* <, >, <=, >= (стандартные неравенства)
Логические операторы
* and (и): возвращает первый ложный аргумент или последний, если оба истинны.
* or (или): возвращает первый истинный аргумент или последний, если оба ложны.
* not (не): инвертирует значение.
Пример:
Управляющие конструкции
Программа редко выполняется линейно сверху вниз. Нам часто нужно ветвление и повторение действий.
Условный оператор if
Конструкция if позволяет выполнять код только при выполнении условия. Блок обязательно заканчивается ключевым словом end.
Обратите внимание на синтаксис: if ... then ... elseif ... then ... else ... end. Слово elseif пишется слитно.
Циклы
Циклы позволяют выполнять блок кода многократно.
#### Цикл while
Выполняется, пока условие истинно. Проверка условия происходит перед итерацией.
#### Цикл repeat...until
Аналог цикла do...while в других языках. Тело цикла выполняется минимум один раз, так как проверка условия происходит в конце. Цикл повторяется, пока условие ложно (until = до тех пор, пока не станет истиной).
#### Числовой цикл for
Самый популярный цикл. Он изменяет переменную-счетчик от начального значения до конечного с определенным шагом.
Синтаксис:
for variable = start, stop, step do ... end
Если step не указан, он считается равным 1.
Количество итераций в цикле for можно рассчитать по формуле:
Где — конечное значение, — начальное значение, — шаг цикла, а — округление вниз. Функция гарантирует, что количество итераций не будет отрицательным.
!Сравнение логики выполнения циклов с предусловием и постусловием.
Область видимости в блоках
Важно помнить, что управляющие конструкции (if, while, for, function) создают свои блоки видимости. Если вы объявите local переменную внутри цикла, она не будет видна снаружи.
Заключение
Мы рассмотрели фундамент языка Lua: как запустить код, как создавать переменные и как управлять потоком выполнения программы. Lua подкупает своей простотой, но за этой простотой скрывается мощный инструмент.
В следующей статье мы перейдем к одной из самых мощных и уникальных особенностей Lua — таблицам (tables), которые заменяют массивы, словари, объекты и модули.