Полное руководство по основам языка Lua

Это подробное руководство по основам языка Lua, включающее примеры программ, которые демонстрируют различные концепции программирования на Lua.

Назад

Первая программа на Lua

Каждая программа на Lua начинается с простого кода:


print("Hello, World!")
        

Типы данных

Основные типы данных в Lua:

Арифметические операции

Пример использования арифметических операций в Lua:


a = 10
b = 20
sum = a + b
diff = b - a
prod = a * b
div = b / a
mod = b % a

print("Sum: " .. sum)
print("Difference: " .. diff)
print("Product: " .. prod)
print("Division: " .. div)
print("Modulus: " .. mod)
        

Ввод/Вывод

Ввод и вывод данных в Lua:


print("Enter an integer:")
num = io.read("*n")
print("You entered: " .. num)
        

Условные операторы

Пример использования оператора if-else:


print("Enter an integer:")
num = io.read("*n")

if num > 0 then
    print("The number is positive.")
elseif num < 0 then
    print("The number is negative.")
else
    print("The number is zero.")
end
        

Циклы

Пример цикла while:


i = 0
while i < 5 do
    print("i = " .. i)
    i = i + 1
end
        

Массивы

Пример работы с массивами в Lua (таблицы с числовыми индексами):


arr = {1, 2, 3, 4, 5}
for i, v in ipairs(arr) do
    print("arr[" .. i .. "] = " .. v)
end
        

Функции

Пример создания и использования функции:


function greet()
    print("Hello from the function!")
end

greet()
        

Классы и объекты

В Lua нет встроенной поддержки классов, но можно создать объекты с помощью таблиц:


Rectangle = {}
Rectangle.__index = Rectangle

function Rectangle.new(width, height)
    local self = setmetatable({}, Rectangle)
    self.width = width
    self.height = height
    return self
end

function Rectangle:area()
    return self.width * self.height
end

function Rectangle:display()
    print("Width: " .. self.width .. ", Height: " .. self.height .. ", Area: " .. self:area())
end

rect = Rectangle.new(5, 3)
rect:display()
        

Наследование

Пример использования наследования в Lua:


Animal = {}
Animal.__index = Animal

function Animal.new()
    local self = setmetatable({}, Animal)
    return self
end

function Animal:speak()
    print("Animal makes a sound.")
end

Dog = setmetatable({}, {__index = Animal})
Dog.__index = Dog

function Dog.new()
    local self = setmetatable(Animal.new(), Dog)
    return self
end

function Dog:speak()
    print("Dog barks.")
end

animal = Dog.new()
animal:speak()
        

Работа с указателями

В Lua указатели не используются напрямую, работа происходит через таблицы:


num = 10
ptr = num

print("Value of num: " .. num)
print("Value via reference: " .. ptr)

num = 20
print("New value of num: " .. num)
        

Динамическое выделение памяти

В Lua управление памятью происходит автоматически с помощью сборщика мусора:


-- Lua управляет памятью автоматически
arr = {1, 2, 3, 4, 5}
print(table.concat(arr, ", "))
        

Работа с файлами

Пример работы с файлами в Lua:


-- Запись в файл
file = io.open("example.txt", "w")
file:write("Hello, file!\n")
file:close()

-- Чтение из файла
file = io.open("example.txt", "r")
content = file:read("*a")
print(content)
file:close()