Перейти к содержимому
Aback Tools Logo

Как Комментировать в Lua: Однострочные, Блочные и Doc-комментарии Luau

Как комментировать в Lua: однострочные комментарии --, длинные блочные скобки --[[ ]], уровни скобок для вложенности, трюк с переключением, doc-комментарии --- Luau в Roblox Studio и удаление комментариев перед деплоем.

DH
Tutorials & How-Tos11 мин чтения2,600 слов

Lua использует два стиля комментариев: префикс из двойного дефиса для однострочных комментариев и длинные скобочные разделители для многострочных блочных комментариев. Оба просты, но в многострочном синтаксисе есть несколько крайних случаев, которые сбивают с толку разработчиков, пришедших из C-подобных языков. Это руководство охватывает все формы комментариев Lua, когда какую использовать и как аккуратно удалить их, когда вы готовы к деплою.

--Однострочный префиксРаботает в любой строке
--[[ ]]Блочный комментарийОхватывает неограниченное число строк
0Специальные ключевые словаКлючевое слово для комментария не нужно

Почему комментарии важны в Lua

Lua — минималистичный язык с динамической типизацией. В нём нет формальных аннотаций типов, обязательных docstring и встроенного генератора документации. Это делает комментарии основным механизмом для объяснения намерений, документирования сигнатур функций и пометки временных изменений кода. В языке, где функция вроде `process(x, y, z)` не даёт ни малейшего намёка на то, что значат x, y и z, одна строка комментария избавляет от часов путаницы любого, кто позже будет читать скрипт — включая вас самих.

Комментарии выполняют три разные задачи в реальном коде Lua: документация (объяснение того, что делает функция, переменная или модуль), аннотация (пометка причины неочевидной логики) и отладка (временное отключение блоков кода без их удаления). Каждой задаче соответствует свой стиль комментирования.

Где комментарии Lua обычно используются

  • Заголовки файлов - автор, дата, имя модуля и краткое описание в начале каждого скрипта.
  • Документация функций - описания параметров, возвращаемые значения и побочные эффекты непосредственно перед определением функции.
  • Встроенные аннотации - короткие заметки в конце строки, объясняющие магическое число, обходной путь или зависимость.
  • Временное отключение - обёртывание блока кода в блочный комментарий для его отключения во время разработки без потери кода.
  • Маркеры TODO / FIXME - пометка незавершённой работы или известных багов для последующего внимания.

Note

В Lua нет нативного формата документирующих комментариев вроде JSDoc или docstring в Python. Используемый в Roblox Studio Luau Language Server распознаёт конвенцию тройного дефиса `---` для аннотаций типов, но это расширение инструментов — сама среда выполнения Lua трактует `---` как обычный однострочный комментарий.

Однострочные комментарии

Однострочный комментарий — самая распространённая форма в Lua. Он начинается с двух последовательных дефисов (`--`) и продолжается до конца текущей строки. Интерпретатор полностью игнорирует всё от `--` до следующего символа перевода строки.

single_line_examples.lua
lua
-- This entire line is a comment
local speed = 150  -- pixels per second

-- TODO: replace magic number with a named constant
local MAX_RETRIES = 5

--[[ This looks like a block comment opener, but only if
     followed immediately by the double bracket ]]
-- The above is two separate single-line comments

Правила размещения

Однострочный комментарий может появиться где угодно, где допустим пробельный символ: на отдельной строке, в конце инструкции или между токенами. Единственное ограничение — `--` не должен появляться внутри строкового литерала: внутри кавычек или длинных скобок он считается литеральным текстом, а не маркером комментария.

placement.lua
lua
local url = "https://example.com/api--v2"  -- the -- inside the string is NOT a comment
local greeting = "hello"  -- this end-of-line comment IS a comment

if speed > 100 then  -- check speed threshold
  slow_down()
end

Конвенция двойного дефиса

В отличие от C или JavaScript, где привычен `//`, Lua использует исключительно `--`. Если вы пришли из другого языка, мышечная память может тянуть вас к `//` или `#`. Ни то, ни другое не является корректным маркером комментария в стандартном Lua — `//` это оператор целочисленного деления в Lua 5.3+, а `#` — оператор длины. Всегда используйте `--` для строчных комментариев.

Warning

Написание `// comment` в Lua 5.3 и новее не порождает синтаксическую ошибку — это парсится как целочисленное деление «ничего», что как раз порождает ошибку. Написание `# comment` в начале файла допустимо только как shebang-строка (`#!/usr/bin/lua`) на Unix-системах; где-либо ещё это вызывает синтаксическую ошибку. Во всех случаях используйте `--`.

Многострочные (блочные) комментарии

Многострочные блочные комментарии в Lua используют синтаксис длинных скобок. Блочный комментарий открывается `--[[` и закрывается `]]`. Интерпретатор Lua игнорирует всё между этими двумя разделителями, включая переводы строк, отступы и любые последовательности `--` внутри блока.

block_comment.lua
lua
--[[
  Module: PlayerController
  Author: Dev Team
  Description: Handles player movement, jump mechanics, and ground detection.
  Dependencies: PhysicsEngine, InputMap
]]

local PlayerController = {}

--[[
  Moves the player by the given delta vector.
  @param player  table  The player object
  @param delta   vec2   Movement direction and magnitude
  @return        nil
]]
function PlayerController.move(player, delta)
  player.position = player.position + delta
end

Уровни длинных скобок для вложенности

Стандартные блоки `--[[ ]]` не могут содержать `]]` буквально — любое `]]` внутри блока завершает комментарий. Lua решает это уровнями скобок: вы добавляете знаки равенства между скобками, создавая уникальную пару открывающего/закрывающего разделителя. Блок уровня 1 использует `--[=[` и `]=]`, уровень 2 — `--[==[` и `]==]`, и так далее. Закрывающий разделитель должен точно соответствовать уровню открывающей скобки.

nested_brackets.lua
lua
--[=[
  This is a level-1 block comment.
  It can safely contain standard --[[ double-bracket ]] syntax
  without ending the outer comment block early.
  Useful when commenting out existing block-commented code.
]=]

--[==[
  Level-2 block comment.
  Can contain both [[ ]] and [=[ ]=] inside it safely.
]==]

Блочный комментарий против нескольких однострочных

АспектБлочный комментарий --[[ ]]Несколько строк --
Синтаксис--[[ ... ]]-- в каждой строке
Для отключения кода✓ Идеально - обёртывает любой блок✗ Утомительно для длинных участков
Для документации✓ Стандарт для заголовков файлов/функций✓ Привычно для встроенных заметок
Переключение в редактореЗависит от плагина редактора✓ Большинство редакторов переключают автоматически
Поддержка вложенности✓ С уровнями скобок [=[ ]=]✗ Неприменимо
Читаемость✓ Чёткая граница начала/конца✓ Легко просматривается построчно

Tip

У большинства редакторов с поддержкой Lua (VS Code с расширением Lua, Roblox Studio, ZeroBrane) есть горячая клавиша **переключить комментарий** — обычно Ctrl+/ или Cmd+/ — которая добавляет или убирает `--` в выбранных строках. Для закомментирования больших блоков кода ручной подход с `--[[` часто быстрее, чем переключать десятки отдельных строк.

Комментирование блоков кода

Временное отключение функции, цикла или условного блока — одно из самых практичных применений комментариев во время разработки. Синтаксис блочных комментариев Lua делает это чистым и обратимым — но есть распространённый приём, делающий переключение ещё быстрее.

1

Оберните блок в --[[ и ]]

Поместите `--[[` на отдельной строке непосредственно перед кодом, который хотите отключить, и `]]` на отдельной строке сразу после. Интерпретатор Lua пропустит весь блок. Код не удаляется — вы можете мгновенно восстановить его, убрав две строки-разделителя.

2

Используйте переключаемый трюк --[[

Разработчики часто применяют хитрый приём переключения: ставят `--[[` перед блоком и `--]]` (обратите внимание на лишний `--`) в конце. Чтобы снова включить блок, они меняют `--[[` на `---[[`. Поскольку `---[[` теперь однострочный комментарий (двойной дефис комментирует `-[[`), блок больше не находится внутри блочного комментария и выполняется нормально.

toggle_pattern.lua
lua
-- DISABLED: change --[[ to ---[[ to re-enable this block
--[[
local debug_overlay = require("DebugOverlay")
debug_overlay.show_hitboxes = true
debug_overlay.show_fps = true
--]]

-- To enable: change the opening --[[ to ---[[
---[[
local debug_overlay = require("DebugOverlay")
debug_overlay.show_hitboxes = true
debug_overlay.show_fps = true
--]]
3

Используйте уровни скобок, если блок уже содержит --[[ ]]

Если закомментируемый код уже содержит блочные комментарии `--[[ ]]`, простая обёртка `--[[` завершится на первом же `]]` — это закрывающая скобка внутреннего комментария, а не ваша. В этом случае используйте блок уровня 1 `--[=[` и закройте `]=]`, чтобы безопасно обернуть внешний блок.

Валидатор синтаксиса Lua

После правки комментариев или реструктуризации блоков проверьте ваш Lua-скрипт на синтаксические ошибки и непарные блочные разделители с построчными диагностиками.

Open tool

Лучшие практики комментирования

Знать синтаксис — простая часть. Знать, когда и как хорошо комментировать — то, что отличает поддерживаемый код Lua от скрипта, с которым невозможно работать через полгода. Эти практики применимы именно к Lua, хотя большинство из них — универсальные принципы для любого языка с динамической типизацией.

Комментируйте почему, а не что

Код уже показывает, что происходит. Комментарий «`-- увеличиваю i на 1`» рядом с `i = i + 1` не добавляет никакой информации. Комментарии заслуживают место, когда объясняют решения: почему выбран конкретный алгоритм, почему лимит установлен на определённое значение или почему функция вызывается в необычном порядке. Если логика ясна из самого кода, комментарий необязателен.

Явно документируйте сигнатуры функций

В Lua нет нативной системы типов для документирования параметров. Краткий блочный комментарий над каждой публичной функцией со списком имён параметров, их ожидаемых типов и возвращаемого значения — одна из самых ценных привычек комментирования в Lua. Это особенно верно для любой функции, используемой коллегами или экспортируемой модулем.

documented_function.lua
lua
--[[
  Calculates the distance between two 2D points.
  @param x1 number  X coordinate of the first point
  @param y1 number  Y coordinate of the first point
  @param x2 number  X coordinate of the second point
  @param y2 number  Y coordinate of the second point
  @return   number  Euclidean distance between the two points
]]
local function distance(x1, y1, x2, y2)
  local dx = x2 - x1
  local dy = y2 - y1
  return math.sqrt(dx * dx + dy * dy)
end

Используйте согласованные маркеры TODO и FIXME

Помечайте незавершённую работу единым префиксом, чтобы её можно было искать. `-- TODO:` помечает запланированные улучшения, `-- FIXME:` — известные баги, а `-- HACK:` — обходные пути, требующие нормальных решений в будущем. Большинство редакторов и средств поиска по коду распознают эти префиксы и могут фильтровать результаты, показывая только помеченные строки.


Избегайте избыточного комментирования

Скрипт, перегруженный комментариями к каждому присваиванию переменной, читать труднее, а не легче. Комментарии добавляют визуальный вес — когда каждая строка ими снабжена, важные комментарии теряются в шуме. Стремитесь к плотности, при которой комментарии помечают действительно неочевидные решения и документируют публичные контракты функций, а не пересказывают каждую операцию.

  • Стоит комментировать: неочевидные выборы алгоритмов, магические числа с бизнес-контекстом, обходные пути для известных багов.
  • Не стоит комментировать: самопоясняющие имена переменных, стандартные идиомы (вроде `for i = 1, #t do`) и очевидные операции.
  • Стоит комментировать: каждую функцию общего модуля с типами параметров и возвращаемыми значениями.
  • Не стоит комментировать: приватные вспомогательные функции, назначение которых очевидно из имени и места вызова.
  • Стоит комментировать: причину условия, которое неочевидно интуитивно из самого условия.

Комментарии в Roblox Luau

Roblox использует Luau — статически типизированное ответвление Lua 5.1. Синтаксис комментариев идентичен стандартному Lua — `--` для однострочных и `--[[ ]]` для многострочных. Luau добавляет одно существенное расширение: документирующий комментарий с тройным дефисом `---`, который Luau Language Server читает, чтобы показывать документацию при наведении, подсказки параметров и сведения о типах прямо в Roblox Studio.

Документирующие комментарии Luau (---)

Когда вы пишете `---` над функцией или переменной, LSP Luau трактует комментарий как структурированную документацию. Вы можете аннотировать типы параметров через `@param`, возвращаемые типы через `@return`, а уведомления об устаревании через `@deprecated`. Они не enforced средой выполнения — их читают инструменты language server и показывают как подсказки в редакторе скриптов Studio.

luau_doc_comment.lua
lua
--- Fires a projectile from the given origin in the given direction.
--- @param origin     Vector3  The world position to spawn the projectile
--- @param direction  Vector3  Normalised direction vector
--- @param speed      number   Initial speed in studs per second
--- @return           BasePart The spawned projectile part
local function fireProjectile(origin, direction, speed)
  -- implementation
end

Практические приёмы комментирования в Roblox

В разработке для Roblox комментарии выполняют дополнительную роль: делают скрипты читаемыми для коллег, которые, возможно, не писали исходный код. Игры Roblox часто вырастают в большие кодовые базы, поддерживаемые командами, и комментарии `--` — основной инструмент документирования контрактов удалённых событий, API модулей и назначения каждого LocalScript.

  • Контракты удалённых событий - комментируйте, какие аргументы ожидает RemoteEvent или RemoteFunction, ведь принимающая сторона не видит код вызывающего.
  • Заголовки API модулей - используйте блок `--[[ Module: ... ]]` в начале каждого ModuleScript, чтобы описать его назначение и публичный интерфейс.
  • Устаревший код - помечайте старые API как `-- @deprecated: use NewFunction() instead`, чтобы коллеги знали, чего избегать.
  • Разделители секций - используйте разделители вида `-- ------------------ Initialization ------------------`, чтобы визуально разбивать длинные скрипты на читаемые зоны.

Если завтра кто-то, незнакомый с вашей кодовой базой, откроет этот скрипт — поймёт ли он, что делает каждая функция, не запуская игру? Вот планка качества комментариев, к которой стоит стремиться.

- Лучшие практики разработки Roblox

Форматтер Lua

Форматируйте ваши скрипты Lua и Luau с единообразными отступами и интервалами. Работает в браузере, без загрузок и регистрации - подходит как для скриптов Roblox, так и для стандартного Lua.

Open tool

Когда удалять комментарии

Комментарии незаменимы во время разработки, но есть конкретные сценарии, когда их удаление — правильный шаг: деплой продакшн-скриптов, обфускация игрового кода, уменьшение размера файла скрипта или подготовка минифицированной сборки для чувствительной к производительности среды.

Почему комментарии увеличивают размер скрипта

В Lua исходные файлы компилируются в байткод во время выполнения. Комментарии удаляются на этапе компиляции, поэтому не влияют на размер байткода и скорость выполнения. Однако в средах, где сам исходный файл передаётся — например, когда Roblox Studio реплицирует скрипты на игровые клиенты или веб-сервер отдаёт конфигурационный файл Lua — размер сырого текста имеет значение. Сильно закомментированный скрипт может быть на 20-40% больше своего очищенного от комментариев эквивалента.

Удаление комментариев вручную против инструмента

Ручное удаление комментариев чревато ошибками. Легко случайно удалить закрывающую `]]`, которая относится к строке, а не к комментарию, или оставить осиротевшие маркеры, вызывающие синтаксические ошибки. Специализированный инструмент удаления комментариев парсит полную грамматику Lua и понимает разницу между `--` внутри строкового литерала и `--`, начинающим комментарий. Он удаляет только настоящие комментарии, полностью сохраняя строки, логику и структуру.

Удалитель комментариев Lua от Aback Tools обрабатывает и однострочные `--`, и многострочные `--[[ ]]` комментарии за один проход. Он работает целиком в вашем браузере — ваш исходный код никогда не загружается на сервер. Вставьте скрипт, нажмите удалить и мгновенно получите очищенный результат.

Удаление комментариев в пайплайне деплоя

Для скриптов, проходящих через шаг сборки, удаление комментариев можно объединить с другими оптимизациями кода. Минификатор Lua удаляет комментарии и схлопывает пробелы за один шаг — полезно, когда нужны и читаемый исходник (с комментариями), и компактная деплоенная версия (без них). Компрессор Lua идёт дальше, показывая сравнение размеров до/после, чтобы вы могли точно измерить, сколько экономит оптимизация.

  • Исходник для разработки - сохраняйте все комментарии; используйте форматтер для поддержания читаемой структуры.
  • Контроль версий - коммитьте полностью закомментированный исходник; никогда не коммитьте очищенные файлы как канонический исходник.
  • Деплоенные/реплицированные скрипты - удаляйте комментарии удалителем, затем при желании минифицируйте для уменьшения размера.
  • Обфусцированные скрипты - комментарии при обфускации всегда удаляются; ручной шаг не нужен.
  • Библиотеки с открытым кодом - сохраняйте комментарии в исходнике; опционально предоставляйте минифицированную сборку в папке `/dist`.

Tip

Всегда считайте **закомментированный исходный файл** канонической версией в контроле версий. Генерируйте из него очищенные и минифицированные сборки как артефакты. Коммит минифицированного или очищенного файла в качестве основного исходника существенно усложняет будущую поддержку.

Удалитель комментариев Lua

Удаляйте все комментарии -- и --[[ ]] из любого Lua-скрипта в один клик. Сохраняет строки, логику и структуру. Работает в браузере и полностью приватно.

Open tool

Key takeaways

  • Lua использует -- для однострочных комментариев и --[[ ]] для многострочных блочных - других маркеров комментариев нет.
  • Уровни длинных скобок (--[=[ ]=], --[==[ ]==]) позволяют вкладывать блочные комментарии в блочные комментарии.
  • Трюк с переключением --[[ (переключение между --[[ и ---[[) позволяет включать и отключать блоки кода одним нажатием клавиши.
  • Luau в Roblox Studio поддерживает doc-комментарии --- для всплывающей документации Luau Language Server - в рантайме это остаются обычные комментарии.
  • Комментируйте почему и контракт, а не что - каждое самопоясняющее действие, снабжённое комментарием, добавляет шум, а не ясность.
  • Удаляйте комментарии перед деплоем с помощью удалителя комментариев Lua - он обрабатывает оба стиля, не трогая строки.
  • Всегда храните полностью закомментированный исходник в контроле версий; генерируйте очищенные или минифицированные сборки как артефакты деплоя.

Частые вопросы

In Lua, you write a single-line comment by starting a line (or the end of a line) with two hyphens: --. Everything after the -- on that line is ignored by the interpreter. For multi-line comments, use --[[ to open the block and ]] to close it. Everything between those delimiters is treated as a comment, regardless of how many lines it spans.

The Lua multi-line comment syntax uses long brackets: --[[ to open and ]] to close. You can also use long bracket levels for nesting - --[=[ opens a level-1 block closed by ]=], --[==[ opens a level-2 block closed by ]==], and so on. This nesting feature lets you comment out blocks that already contain standard --[[ ]] comments without breaking the outer comment.

Yes. Lua supports block (multi-line) comments using the --[[ ... ]] syntax. The opening delimiter is -- followed by a long bracket [[ and the closing delimiter is the matching ]]. Block comments can span any number of lines and are commonly used for file headers, function documentation, and temporarily disabling sections of code during debugging.

Wrap the section with --[[ on its own line before the code and ]] on its own line after it. The interpreter will ignore everything in between. If the code you are commenting out itself contains --[[ ]] blocks, use a higher bracket level like --[=[ ... ]=] for the outer comment to avoid the inner ]] terminating the block early.

A double hyphen -- starts a single-line comment that ends at the next newline. Adding long brackets immediately after the -- (i.e. --[[) turns it into a block comment that spans multiple lines until the matching ]]. The -- is always the comment marker in Lua; the long brackets control whether the comment terminates at end-of-line or at an explicit closing delimiter.

Not directly with plain --[[ ]] - a ]] inside a --[[ block will close the comment early. To nest comments, use increasing bracket levels. --[=[ ... ]=] and --[==[ ... ]==] are level-1 and level-2 block comments respectively. You can nest --[[ ]] inside --[=[ ]=] safely because the closing ]] does not match the outer ]=].

It depends on your goal. For production deployments or minified game scripts where file size and load time matter, removing comments is good practice - it reduces the script size and makes the code harder to casually read. For open-source libraries or any code you maintain long-term, keep comments in the source file and only strip them in the deployed build.

Luau, Roblox's derivative of Lua 5.1, uses identical comment syntax: -- for single-line and --[[ ]] for multi-line block comments. Luau also supports a documentation comment convention using --- (triple hyphen) for type-annotation comments that tools like Luau Language Server read for hover documentation. These are still plain Lua comments at runtime - the Roblox engine ignores them like any other comment.

ShareXLinkedIn