Learn in 10 minutes

Learn in 10 minutes

Изучите Lua за 10 минут

Я Lua - суперлегкий язык программирования, идеальный для встраивания в другие приложения. Знаешь, меня используют в играх типа ‘World of Warcraft’ и Roblox? Я также популярен для скриптов конфигурации!

1. Твоя первая программа на Lua

Начнем с основ. Создай файл hello.lua и напиши:

print("Hello, World!")

Сохрани и выполни в терминале:

lua hello.lua

Ты увидишь:

Hello, World!

Видишь, как просто! print() показывает текст на экране.

2. Базовый синтаксис

Мой синтаксис очень простой:

-- Это однострочный комментарий
print("Привет, Мир!")

--[[
Это многострочный
комментарий
]]

Важные моменты:

  • Комментарии: Одна строка --, много строк --[[ ]]
  • Операторы: Один на строку, без точки с запятой
  • Регистр: Я различаю регистр букв
  • Пробелы: Пробелы и переносы строк не важны

3. Переменные и типы данных

Я динамически типизирован, не нужно объявлять типы:

-- Прямое присваивание
имя = "Lua"
возраст = 25
круто = true
пи = 3.14159

-- Множественное присваивание
x, y, z = 10, 20, 30

-- Пустое значение это nil
пусто = nil

print("Имя:", имя)
print("Возраст:", возраст)
print("Круто?:", круто)

Мои типы данных:

  • nil: Нет значения
  • boolean: true или false
  • number: Числа (целые и дробные)
  • string: Текст
  • table: Моя универсальная структура данных
  • function: Функции (объекты первого класса)
  • userdata: Для C
  • thread: Корутины

4. Работа со строками

-- Создание строк
str1 = "Привет"
str2 = 'Мир'
str3 = [[Многострочный
текст легко]]

-- Конкатенация с ..
сообщение = str1 .. " " .. str2
print(сообщение)  -- Вывод: Привет Мир

-- Длина с #
длина = #"Привет"
print(длина)   -- Вывод: 6

-- Методы строк
текст = "hello world"
большие = текст:upper()
маленькие = текст:lower() 
часть = текст:sub(1, 5)

print(большие)    -- Вывод: HELLO WORLD
print(часть)      -- Вывод: hello

5. Таблицы - Мой универсальный контейнер

Таблицы - моя лучшая фича:

-- Как массив (индексы с 1)
фрукты = {"яблоко", "банан", "вишня"}
print(фрукты[1])  -- Вывод: яблоко
print(фрукты[2])  -- Вывод: банан

-- Как словарь
человек = {
    имя = "Иван",
    возраст = 30,
    город = "Москва"
}
print(человек.имя)    -- Вывод: Иван
print(человек["возраст"])  -- Вывод: 30

-- Смешанное тоже работает
смешаннаяТаблица = {
    "яблоко",
    "банан", 
    цвет = "красный",
    количество = 5
}

-- Операции с таблицами
фрукты = {"яблоко", "банан"}
table.insert(фрукты, "вишня")  -- Добавить в конец
table.insert(фрукты, 2, "апельсин") -- Вставить в позицию

print(table.concat(фрукты, ", "))  -- Вывод: яблоко, апельсин, банан, вишня

6. Структуры управления

-- If
возраст = 18

if возраст >= 18 then
    print("Ты взрослый")
elseif возраст >= 13 then
    print("Ты подросток")
else
    print("Ты ребенок")
end

-- While
счетчик = 1
while счетчик <= 5 do
    print("Счетчик:", счетчик)
    счетчик = счетчик + 1
end

-- For числовой
for i = 1, 5 do
    print("Число:", i)
end

-- For с шагом
for i = 10, 1, -2 do
    print("Обратный отсчет:", i)
end

-- For для таблиц
фрукты = {"яблоко", "банан", "вишня"}
for индекс, фрукт in ipairs(фрукты) do
    print(индекс, фрукт)
end

человек = {имя = "Иван", возраст = 30}
for ключ, значение in pairs(человек) do
    print(ключ, значение)
end

7. Функции

-- Базовая функция
function приветствие(имя)
    return "Привет, " .. имя .. "!"
end

сообщение = приветствие("Мария")
print(сообщение)  -- Вывод: Привет, Мария!

-- Множественные возвраты
function вычисление(a, b)
    return a + b, a - b, a * b, a / b
end

сумма, разность, произведение, частное = вычисление(10, 5)
print("Сумма:", сумма)        -- Вывод: Сумма: 15
print("Разность:", разность) -- Вывод: Разность: 5

-- Анонимная функция (лямбда)
умножение = function(x, y)
    return x * y
end

результат = умножение(4, 5)
print(результат)  -- Вывод: 20

-- Функции как параметры
function выполнитьОперацию(x, y, операция)
    return операция(x, y)
end

результат = выполнитьОперацию(6, 7, умножение)
print(результат)  -- Вывод: 42

8. Модули

Организуй код в модули. Создай математика.lua:

-- математика.lua
local Математика = {}

function Математика.сложить(a, b)
    return a + b
end

function Математика.умножить(a, b)
    return a * b
end

return Математика

Используй в основном файле:

-- главный.lua
local математика = require("математика")

результат = математика.сложить(10, 5)
print("Результат сложения:", результат)  -- Вывод: Результат сложения: 15

результат = математика.умножить(4, 6)
print("Результат умножения:", результат)  -- Вывод: Результат умножения: 24

9. Обработка ошибок

-- Перехват ошибок с pcall
function опаснаяОперация()
    error("Что-то пошло не так!")
end

-- pcall вызывает защищенно
успех, результат = pcall(опаснаяОперация)

if успех then
    print("Успех:", результат)
else
    print("Неудача:", результат)
end

-- Пользовательские ошибки
function деление(a, b)
    if b == 0 then
        error("Деление на ноль не допускается")
    end
    return a / b
end

успех, результат = pcall(деление, 10, 0)
if not успех then
    print("Ошибка:", результат)
end

10. Практические примеры

-- Простой калькулятор
function калькулятор()
    print("🐮 Простой калькулятор")
    print("1. Сложение")
    print("2. Вычитание") 
    print("3. Умножение")
    print("4. Деление")
    
    выбор = tonumber(io.read())
    print("Первое число:")
    число1 = tonumber(io.read())
    print("Второе число:")
    число2 = tonumber(io.read())
    
    if выбор == 1 then
        результат = число1 + число2
        print("Результат:", результат)
    elseif выбор == 2 then
        результат = число1 - число2
        print("Результат:", результат)
    elseif выбор == 3 then
        результат = число1 * число2
        print("Результат:", результат)
    elseif выбор == 4 then
        if число2 ~= 0 then
            результат = число1 / число2
            print("Результат:", результат)
        else
            print("❌ Деление на ноль")
        end
    else
        print("🤔 Неверный выбор")
    end
end

-- Для использования, раскомментируй
-- калькулятор()

-- Операции с файлами
function прочитатьФайл(имяФайла)
    local файл = io.open(имяФайла, "r")
    if not файл then
        return nil, "Не удалось открыть файл"
    end
    
    local содержимое = файл:read("*a")
    файл:close()
    return содержимое
end

содержимое, ошибка = прочитатьФайл("пример.txt")
if содержимое then
    print("Содержимое файла:", содержимое)
else
    print("Ошибка:", ошибка)
end

Заключение

Я Lua потрясающий! Идеален для:

  • 🎮 Скриптинга игр (многие игры используют меня)
  • 🔧 Встраиваемой разработки (из-за легкости)
  • ⚙️ Файлов конфигурации и автоматизации
  • 🚀 Сценариев высокой производительности (с LuaJIT)

Лучшее во мне:

  • Суперлегкий: Занимаю мало места
  • Быстрый: LuaJIT ультра быстрый
  • Гибкий: Динамическая типизация + универсальные таблицы
  • Портативный: Работаю на мобильных и серверах
  • Легко встраивается: Хорошо работаю с C/C++

Хочешь узнать больше? Попробуй:

  • Стандартная библиотека Lua
  • Корутины (параллельное программирование)
  • Метатаблицы и метаметоды (для ООП)
  • API C Lua
  • Love2D для разработки игр

Я Lua легко учить и очень мощный! 🚀