# Как оформлять код на Lua

> Правила оформления Lua-кода для скриптов MoonLoader и open-source проектов: кавычки, snake_case, отступы, комментарии, таблицы, вызовы функций, DRY. По мотивам гайда LuaRocks.

- URL: https://pakulichev.com/wiki/lua-code-style
- Author: Pakulichev (https://pakulichev.com/)
- Language: ru
- Updated: 2026-10-15
- Whole site for LLMs: https://pakulichev.com/llms.txt (index), https://pakulichev.com/llms-full.txt (full text)

В январе 2021 года я выложил на BLAST.HK гайд по оформлению Lua-кода. Основа – открытые источники, прежде всего style guide Хишама Мухаммада, одного из авторов LuaRocks. Это рекомендации. Особенно они полезны, когда код читают другие – в open-source и в команде. Ниже – короткая выжимка с примерами.

## Строки

Строки – в двойных кавычках. Одинарные оставьте для символов и строк, где внутри есть двойные:

```lua
local name = "Pavel_Garson"
local sep = ','
local msg = 'Он сказал: "привет"'
```

## Имена

Функции и переменные – в `snake_case`. Функции, которые что-то проверяют, начинайте с `is_`. Над функцией коротко опишите аргументы и что она возвращает:

```lua
-- ped: хендл персонажа; возвращает true, если он в машине
local function is_in_vehicle(ped)
  return isCharInAnyCar(ped)
end
```

## Отступы и строки

- Отступ – 2–3 пробела, одинаково во всём файле.
- Одна инструкция на строку.
- Длинные строки и условия переносите.
- Не выравнивайте `=` табами в соседних строках: при первой же правке выравнивание поедет.

## Комментарии

После `--` ставьте один пробел. Многострочный комментарий начинайте с новой строки и с отступом:

```lua
--[[
  Синхронизация игроков.
  Вызывается каждые 100 мс.
]]
```

## Таблицы

Ключи пишите «как есть», квадратные скобки – только когда ключ лежит в переменной:

```lua
local cfg = { nick = "Pavel_Garson", rank = 5 }
cfg[field] = value
```

## Вызовы

Скобки ставьте всегда, даже если аргумент один: `require("socket")`, а не `require "socket"`. Для коротких условий подходит «тернарник» через `and`/`or`:

```lua
local label = is_online and "в сети" or "не в сети"
```

Он ломается, если среднее значение может быть `false` или `nil`, – в этом случае пишите обычный `if`.

## Повторы

Повторяющийся код выносите в функцию. Но функция ради одного вызова – тоже лишняя: она только заставляет читателя прыгать по файлу.

## FAQ

### Какой стиль имён принят в Lua?

Для функций и переменных – snake_case. Функции-проверки удобно начинать с is_, например is_player_alive.

### Какие кавычки использовать для строк в Lua?

По умолчанию двойные. Одинарные – для отдельных символов и строк, внутри которых есть двойные кавычки.

### Нужно ли ставить скобки при вызове функции с одним аргументом в Lua?

Да, всегда: require("socket"), а не require "socket". Так вызов сразу видно.
