Синтаксис и пунктуация в Lua
Знаки препинания
Для новичков один из самых частых источников путаницы — что означают символы вроде .., ;, ' или :, особенно когда они встречаются в непривычных комбинациях. В Lua многие знаки работают иначе, чем в других языках (например, JavaScript или Python), поэтому важно чётко понимать их назначение.
Кавычки
Кавычки (' и ").
В Lua оба типа кавычек допустимы для строк, и выбор зависит только от содержимого строки и стиля кода.
local name = "Тимур"
local message = 'Hello from Lua!'
Оба варианта работают одинаково. Разница — только в удобстве экранирования. Удобно использовать двойные кавычки, если внутри строки есть апостроф:
local text = "It's a beautiful day"
Удобно использовать одинарные, если внутри есть цитата:
local quote = 'He said, "Welcome!"'
Апострофы
Апострофы (’), например, “smart quotes” из Word — не являются частью синтаксиса и вызовут ошибку:
local wrong = “This won’t work” -- ОШИБКА: неверные кавычки
Точки с запятой
Точки с запятой (;) — опциональны, но редко используются. В Lua точки с запятой не обязательны. Интерпретатор автоматически определяет конец выражения (по аналогии с ASI в JavaScript, но проще).
print("Hello")
local x = 10
local y = 20
Вы можете использовать ;, если хотите:
print("Hello"); local x = 10; local y = 20;
Но в сообществе Lua принято не ставить точки с запятой, если только вы не пишете несколько выражений в одной строке.
Запятая
Запятая (,) — разделитель элементов. Используется повсеместно для разделения параметров функций, элементов таблиц и нескольких значений при присваивании.
-- Параметры функции
function greet(name, age)
print(name .. " is " .. age .. " years old")
end
-- Таблица
local colors = {"red", "green", "blue"}
-- Множественное присваивание
local x, y, z = 1, 2, 3
В отличие от JavaScript, в таблицах можно ставить запятую после последнего элемента — это не ошибка:
local fruits = {
"apple",
"banana",
}
Это удобно при добавлении новых элементов — не нужно менять предыдущую строку.
Точка и двоеточие
Точка (.) и двоеточие (:) — доступ к полям и методам. Это одна из ключевых особенностей Lua, особенно при работе с таблицами и ООП.
Чтобы получить доступ к полю или вызвать функцию, нужно поставить точку.
Пример:
local person = {name = "Bob", age = 30}
print(person.name) -- -> "Bob"
function person.greet()
print("Hi, I'm " .. person.name)
end
person.greet() -- вызов функции
Вызывать методы можно через двоеточие, это синтаксический сахар для передачи объекта как первого аргумента (self).
function person:greet()
print("Hi, I'm " .. self.name) -- self = person
end
person:greet() -- то же самое, что person.greet(person)
То есть, эти два метода будут эквивалентны:
person:greet()
person.greet(person)
Две точки
Две точки (..) — конкатенация строк. В Lua нет оператора + для строк (как в JavaScript). Вместо этого используются две точки.
local first = "Hello"
local last = "World"
local full = first .. ", " .. last -- -> "Hello, World"
Будьте осторожны: .. имеет низкий приоритет, лучше брать в скобки при смешивании с числами:
print("Value: " .. 5 + 3) -- ОШИБКА: попытка склеить строку и результат 5+3
print("Value: " .. (5 + 3)) -- ПРАВИЛЬНО: -> "Value: 8"
Подчёркивание
Подчёркивание (_) — соглашения и именование. Как и в других языках, _ используется по стилю, но не имеет специального смысла для интерпретатора.
_ часто используется как имя «игнорируемой» переменной, часто используется в циклах for, когда индекс не нужен:
for _, value in ipairs(fruits) do
print(value)
end
_name — соглашение о внутреннем/приватном поле:
local config = {
_api_key = "12345", -- не для внешнего использования
public_url = "https://..."
}
Это не приватность, просто сигнал другим разработчикам.
__name — зарезервировано для метаметодов:
mt.__index = function() ... end
mt.__add = function() ... end
Такие имена — часть механизма метатаблиц.
_ в числах (Luau) — читаемость:
local billion = 1_000_000_000 -- работает в Luau
В Luau (но не в классическом Lua) можно использовать _ как разделитель. В стандартном Lua это вызовет ошибку.
Прочие операторы
Вот важное отличие от JavaScript, C# и Java:
- Lua не имеет побитовых операторов
|,&,^в ядре (до версии 5.2). - Нет логических
||и&&— вместо них используются or и and.
В Lua используются слова:
if x == 1 or y == 2 then
print("At least one condition is true")
end
if x == 1 and y == 2 then
print("Both conditions are true")
end
local result = a or "default" -- как ?? в C# или || в JS
Это делает код более читаемым, но менее компактным.
В Lua 5.3+ появились побитовые операторы: |, &, ~, <<, >>.
В Roblox (Luau) они также поддерживаются. Но записываются они через C-подобные символы, а не слова. Однако в Lua 5.1 (часто используемом как база) этих операций нет — нужно использовать библиотеки вроде bit32.
local flags = permission_read | permission_write
Важно учесть кое-что ещё. В классическом Lua : (двоеточие) используется только для вызова методов с self. В Luau : также используется для аннотаций типов.
-- Luau:
local name: string = "Alice"
function greet(name: string): string
return "Hello, " .. name
end
Это не работает в чистом Lua — будет ошибка синтаксиса. И если видите : type, значит, код написан для Roblox Studio или Luau CLI.
В Lua нет шаблонных строк, как в JavaScript (Hello ${name}). Чтобы вставлять переменные в строки, используйте конкатенацию:
local name = "Timur"
print("Hello, " .. name .. "!") -- единственный способ
Lua делает ставку на читаемость и простоту, поэтому использует слова вместо символов (or, and), отказывается от лишних знаков (;), даёт гибкость через таблицы и метатаблицы. Поэтому, если вы уже знакомы с другими скриптовыми языками, может быть непривычно.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Lua — это компактный, быстрый, встраиваемый интерпретируемый язык программирования высокого уровня, разработанный с акцентом на простоту, гибкость и эффективность. Набор советов, правил, принципов и обычаев в разработке на этом языке. LÖVE (Love2D) - 2D-движок для создания игр на Lua, кроссплатформенный, имеет простой API (love.load(), love.update(dt), love.draw()), используется инди-разработчиками и для обучения. Lua 5.1 (2006) — стабильная, самая распространённая версия. Используется в World of Warcraft, Nginx, многих движках. Гайд по установке и настройке с написанием первой программы и её запуском. Lua использует двадцать два зарезервированных ключевых слова. Все они являются частью синтаксиса языка и недоступны для использования в качестве идентификаторов. Набор функций, которые включены в стандартную библиотеку языка. Типизация, набор правил определения типа данных значений языка. Lua предоставляет две формы условной конструкции — if-then-else и её компактный аналог через and/or, хотя последний используется с осторожностью из-за семантических различий. Анонимные функции (или лямбда-выражения) — это функции без имени, которые могут быть определены inline. Они особенно полезны при передаче в качестве аргументов или при создании замыканий. Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая организует код вокруг объектов, объединяющих данные и поведение. В языке Lua отсутствует встроенная поддержка… Файл — это именованный набор данных, хранящийся на носителе информации. В Lua работа с файлами осуществляется через встроенную библиотеку io. Библиотека предоставляет функции для открытия, чтения,…Основы языка Lua
Рекомендации по разработке на Lua
Экосистема приложений на Lua
История языка Lua
Первая программа на Lua
Ключевые слова языка Lua
Встроенные функции и стандартная библиотека Lua
Типы данных и объявление переменных в Lua
Управляющие конструкции и циклы в Lua
Функции, замыкания и анонимные функции
Объектно-ориентированное программирование в Lua
Работа со строками, таблицами и файлами