Показать страницуСсылки сюдаДобавить в книгуНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Самоучитель по Lua ====== [[https://www.lua.org|Lua]] — лёгкий скриптовый язык программирования. Создан в Бразилии в 1993 году. Используется в играх (Roblox, World of Warcraft), веб-серверах (Nginx, OpenResty) и встраиваемых системах. **Особенности:** * Очень быстрый и компактный * Простой синтаксис * Динамическая типизация (не нужно объявлять тип переменной) * Индексация таблиц **с 1**, а не с 0 ===== Содержание ===== * [[#первая_программа|Первая программа]] * [[#переменные|Переменные]] * [[#типы_данных|Типы данных]] * [[#ввод_и_вывод|Ввод и вывод]] * [[#условные_операторы|Условные операторы]] * [[#циклы|Циклы]] * [[#таблицы|Таблицы]] * [[#функции|Функции]] * [[#справочник_символов|Справочник символов]] * [[#справочник_функций|Справочник функций]] * [[#пример_игры|Полный пример игры]] ===== Первая программа ===== Создайте файл ''hello.lua'' и напишите: <code lua> print("Привет, мир!") </code> Запуск в терминале: <code bash> lua hello.lua </code> Вывод: <code> Привет, мир! </code> ===== Переменные ===== Переменная — это «коробка с именем», где хранятся данные. <code lua> -- Имена могут содержать буквы, цифры и подчёркивание -- Начинаться должны с буквы или подчёркивания name = "Анна" -- строка (текст) age = 25 -- число (целое или дробное) is_online = true -- булевый тип (правда/ложь) score = nil -- пустое значение print(name) -- Анна print(age + 5) -- 30 </code> **Правила именования:** * ''myVar'' (верблюжий стиль) * ''my_var'' (змеиный стиль, рекомендуется) * ''_private'' (начинается с подчёркивания) * Нельзя начинать с цифры: ''1var'' — ошибка ===== Типы данных ===== ^ Тип ^ Описание ^ Пример ^ | ''nil'' | пустота, отсутствие значения | ''x = nil'' | | ''boolean''| истина или ложь | ''true'', ''false'' | | ''number'' | числа (целые и дробные) | ''42'', ''3.14'' | | ''string'' | текст в кавычках | ''"Привет"'', '''ОК'''| | ''table'' | контейнер для данных | ''{1, 2, 3}'' | | ''function''| функция | ''function() end'' | **Проверка типа:** <code lua> print(type("hello")) -- string print(type(42)) -- number print(type(true)) -- boolean print(type(nil)) -- nil </code> ===== Ввод и вывод ===== **Вывод на экран:** <code lua> print("Текст") -- выводит и переводит строку io.write("Без перевода") -- не переводит строку </code> **Ввод с клавиатуры:** <code lua> print("Как вас зовут?") name = io.read() -- читает строку print("Добро пожаловать, " .. name) -- Чтение числа print("Сколько вам лет?") age = tonumber(io.read()) -- преобразует строку в число </code> **Конкатенация (склеивание строк):** <code lua> -- Оператор .. склеивает строки message = "Привет, " .. "мир!" print(message) -- Привет, мир! </code> ===== Условные операторы ===== === if (если) === <code lua> age = 18 if age >= 18 then print("Вы совершеннолетний") end </code> === if-else (если-иначе) === <code lua> age = 16 if age >= 18 then print("Можете голосовать") else print("Вы ещё слишком молоды") end </code> === if-elseif-else === <code lua> score = 85 if score >= 90 then print("Отлично") elseif score >= 70 then print("Хорошо") elseif score >= 50 then print("Удовлетворительно") else print("Неудовлетворительно") end </code> === Операторы сравнения === ^ Оператор ^ Значение ^ Пример ^ | ''=='' | равно | ''5 == 5'' → true | | ''~='' | не равно | ''5 ~= 3'' → true | | ''<'' | меньше | ''3 < 5'' → true | | ''>'' | больше | ''5 > 3'' → true | | ''<='' | меньше или равно | ''3 <= 3'' → true | | ''>='' | больше или равно | ''5 >= 5'' → true | === Логические операторы === ^ Оператор ^ Значение ^ Пример ^ | ''and'' | И (оба истинны) | ''true and true'' → true | | ''or'' | ИЛИ (хоть одно) | ''true or false'' → true | | ''not'' | НЕ (отрицание) | ''not true'' → false | <code lua> age = 20 has_ticket = true if age >= 18 and has_ticket then print("Проходите на концерт") end </code> ===== Циклы ===== === while === <code lua> count = 1 while count <= 5 do print("Итерация " .. count) count = count + 1 end </code> === for === <code lua> -- for переменная = начало, конец, шаг do for i = 1, 5 do print(i) -- 1 2 3 4 5 end -- с шагом 2 for i = 1, 10, 2 do print(i) -- 1 3 5 7 9 end </code> === repeat-until === <code lua> x = 10 repeat print(x) x = x - 1 until x == 0 </code> === break === <code lua> for i = 1, 10 do if i == 5 then break -- выход из цикла end print(i) -- 1 2 3 4 end </code> ===== Таблицы ===== Таблица — главная структура данных в Lua. === Таблица как список (массив) === <code lua> -- Создание fruits = {"яблоко", "банан", "апельсин"} -- Доступ по индексу (индексация С 1!) print(fruits[1]) -- яблоко print(fruits[2]) -- банан -- Изменение элемента fruits[2] = "груша" -- Добавление элемента fruits[4] = "киви" -- Длина таблицы (#) print(#fruits) -- 4 -- Перебор с ipairs for index, value in ipairs(fruits) do print(index .. ": " .. value) end </code> === Таблица как словарь === <code lua> -- Создание person = { name = "Иван", age = 30, city = "Москва" } -- Доступ через точку print(person.name) -- Иван -- Доступ через квадратные скобки print(person["age"]) -- 30 -- Перебор словаря (pairs) for key, value in pairs(person) do print(key .. " = " .. value) end </code> === Вложенные таблицы === <code lua> students = { {name = "Анна", grade = 5}, {name = "Олег", grade = 4}, {name = "Мария", grade = 5} } print(students[1].name) -- Анна print(students[2].grade) -- 4 </code> ===== Функции ===== === Объявление и вызов === <code lua> -- Простая функция function greet() print("Привет!") end greet() -- вызов -- Функция с параметрами function greet_person(name) print("Привет, " .. name .. "!") end greet_person("Анна") -- Функция с возвращаемым значением function add(a, b) return a + b end result = add(5, 3) print(result) -- 8 </code> === Локальные переменные === <code lua> -- global (глобальная) — видна везде global_var = 10 function test() local local_var = 20 -- локальная — видна только внутри global_var = 30 end test() print(global_var) -- 30 </code> === Анонимные функции === <code lua> -- Функцию можно присвоить переменной say_hello = function(name) print("Hello, " .. name) end say_hello("John") -- Функция может принимать другую функцию function apply(func, value) return func(value) end double = function(x) return x * 2 end print(apply(double, 5)) -- 10 </code> ===== Справочник символов ===== === Арифметические операторы === ^ Символ ^ Название ^ Пример ^ Результат ^ | ''+'' | сложение | ''5 + 3'' | ''8'' | | ''-'' | вычитание | ''5 - 3'' | ''2'' | | ''*'' | умножение | ''5 * 3'' | ''15'' | | ''/'' | деление | ''5 / 2'' | ''2.5'' | | ''//'' | целочисленное деление| ''5 // 2''| ''2'' | | ''%'' | остаток от деления| ''5 % 2'' | ''1'' | | ''^'' | возведение в степень| ''2^3'' | ''8'' | === Операторы сравнения === ^ Символ ^ Название ^ Пример ^ Результат ^ | ''=='' | равно | ''5 == 5'' | ''true'' | | ''~='' | не равно | ''5 ~= 3'' | ''true'' | | ''<'' | меньше | ''3 < 5'' | ''true'' | | ''>'' | больше | ''5 > 3'' | ''true'' | | ''<='' | меньше или равно | ''3 <= 3'' | ''true'' | | ''>='' | больше или равно | ''5 >= 5'' | ''true'' | === Логические операторы === ^ Символ ^ Название ^ Пример ^ Результат ^ | ''and'' | логическое И | ''true and false'' | ''false'' | | ''or'' | логическое ИЛИ | ''true or false'' | ''true'' | | ''not'' | логическое НЕ | ''not true'' | ''false'' | === Специальные символы === ^ Символ ^ Название ^ Описание ^ Пример ^ | ''='' | присваивание | присваивает значение переменной | ''x = 5'' | | ''..'' | конкатенация | склеивает строки | ''"a".."b"'' → ''"ab"'' | | ''#'' | длина | длина строки или таблицы | ''#"hello"'' → ''5'' | | ''...'' | vararg | переменное количество аргументов| ''function f(...)'' | | '':'' | метод | синтаксический сахар для методов| ''obj:method()'' | | ''--'' | комментарий | однострочный комментарий | ''-- текст'' | | ''--[['' | начало блока | многострочный комментарий | ''--[[ текст ]]'' | === Управляющие последовательности === ^ Последовательность ^ Значение ^ | ''\n'' | перевод строки | | ''\t'' | табуляция | | ''\\'' | обратный слеш | | ''\"'' | двойная кавычка | | ''\''' | одинарная кавычка | ===== Справочник функций ===== === Ввод/вывод === ^ Функция ^ Описание ^ | ''print(...)'' | выводит значения, с переводом строки | | ''io.write(...)'' | выводит без перевода строки | | ''io.read()'' | читает строку из ввода | | ''io.read("*n")'' | читает число | === Преобразование === ^ Функция ^ Описание ^ | ''tonumber(s)'' | преобразует строку в число | | ''tostring(n)'' | преобразует число в строку | | ''type(v)'' | возвращает тип значения | === Математические (math.*) === ^ Функция ^ Описание ^ Пример ^ | ''math.abs(x)'' | абсолютное значение | ''math.abs(-5)'' → ''5'' | | ''math.floor(x)'' | округление вниз | ''math.floor(3.7)'' → ''3'' | | ''math.ceil(x)'' | округление вверх | ''math.ceil(3.2)'' → ''4'' | | ''math.random()'' | случайное от 0 до 1 | ''math.random()'' | | ''math.random(n)'' | случайное от 1 до n | ''math.random(10)'' | | ''math.random(a,b)'' | случайное от a до b | ''math.random(5,15)'' | | ''math.min(a,b)'' | минимальное значение | ''math.min(3,1,4)'' → ''1'' | | ''math.max(a,b)'' | максимальное значение | ''math.max(3,1,4)'' → ''4'' | | ''math.sqrt(x)'' | квадратный корень | ''math.sqrt(9)'' → ''3'' | | ''math.pi'' | число Пи (константа) | ''math.pi'' → ''3.14159'' | === Строковые (string.*) === ^ Функция ^ Описание ^ Пример ^ | ''string.len(s)'' | длина строки | ''string.len("abc")'' → ''3'' | | ''string.upper(s)'' | в верхний регистр | ''string.upper("abc")'' → ''"ABC"'' | | ''string.lower(s)'' | в нижний регистр | ''string.lower("ABC")'' → ''"abc"'' | | ''string.sub(s,i,j)''| подстрока | ''string.sub("hello",2,4)'' → ''"ell"'' | | ''string.find(s,p)'' | поиск подстроки | ''string.find("hello","el")'' → ''2'' | | ''string.rep(s,n)'' | повторение строки | ''string.rep("hi",3)'' → ''"hihihi"'' | === Табличные (table.*) === ^ Функция ^ Описание ^ | ''table.insert(t,v)'' | вставляет в конец | | ''table.insert(t,i,v)'' | вставляет на позицию i | | ''table.remove(t)'' | удаляет последний элемент | | ''table.remove(t,i)'' | удаляет элемент на позиции i | | ''table.sort(t)'' | сортирует таблицу | | ''table.concat(t,sep)'' | объединяет таблицу в строку | ===== Полный пример: игра «Угадай число» ===== <code lua> -- Игра «Угадай число» math.randomseed(os.time()) secret_number = math.random(1, 100) attempts = 0 max_attempts = 10 guessed = false print("=" :rep(40)) print(" Добро пожаловать в игру 'Угадай число'") print("=" :rep(40)) print("Я загадал число от 1 до 100.") print("У вас есть " .. max_attempts .. " попыток.") print() while not guessed and attempts < max_attempts do print("Попытка " .. (attempts + 1) .. " из " .. max_attempts) io.write("Ваше число: ") local input = io.read() local guess = tonumber(input) if guess == nil then print("Ошибка: введите число!\n") goto continue end attempts = attempts + 1 if guess < 1 or guess > 100 then print("Число должно быть от 1 до 100!\n") goto continue end if guess == secret_number then print("\nПоздравляю! Вы угадали число " .. secret_number .. "!") print("Количество попыток: " .. attempts) guessed = true elseif guess < secret_number then print("Загаданное число БОЛЬШЕ\n") else print("Загаданное число МЕНЬШЕ\n") end ::continue:: end if not guessed then print("\nК сожалению, вы не угадали.") print("Было загадано число: " .. secret_number) end print("\nСпасибо за игру!") </code> ===== Полезные советы ===== * Используйте **локальные переменные** везде, где возможно — они быстрее. * **Индексация с 1** — запомните это, чтобы не путаться. * **Проверяйте ввод** пользователя через ''tonumber()''. * **Комментируйте код** — через месяц вы забудете, что он делает. * **Изучайте ошибки** — Lua даёт понятные сообщения. ===== Дополнительные ресурсы ===== * [[https://www.lua.org|Официальный сайт Lua]] * [[https://www.lua.org/manual/5.4/|Документация Lua 5.4]] * [[https://replit.com/languages/lua|Онлайн-песочница Replit]] ---- //[[antistatus@mail.ru|Antistatus]] 15.04.2026 07:52// docs/lua.txt Последнее изменение: 20 ч. назад — admin