Как оформлять код на Lua
Сокращённая версия моего гайда с BLAST.HK (январь 2021): правила, по которым чужой Lua-код читается как свой.
В январе 2021 года я выложил на BLAST.HK гайд по оформлению Lua-кода. Основа – открытые источники, прежде всего style guide Хишама Мухаммада, одного из авторов LuaRocks. Это рекомендации. Особенно они полезны, когда код читают другие – в open-source и в команде. Ниже – короткая выжимка с примерами.
Строки
Строки – в двойных кавычках. Одинарные оставьте для символов и строк, где внутри есть двойные:
local name = "Pavel_Garson"
local sep = ','
local msg = 'Он сказал: "привет"'
Имена
Функции и переменные – в snake_case. Функции, которые что-то проверяют, начинайте с is_. Над функцией коротко опишите аргументы и что она возвращает:
-- ped: хендл персонажа; возвращает true, если он в машине
local function is_in_vehicle(ped)
return isCharInAnyCar(ped)
end
Отступы и строки
- Отступ – 2–3 пробела, одинаково во всём файле.
- Одна инструкция на строку.
- Длинные строки и условия переносите.
- Не выравнивайте
=табами в соседних строках: при первой же правке выравнивание поедет.
Комментарии
После -- ставьте один пробел. Многострочный комментарий начинайте с новой строки и с отступом:
--[[
Синхронизация игроков.
Вызывается каждые 100 мс.
]]
Таблицы
Ключи пишите «как есть», квадратные скобки – только когда ключ лежит в переменной:
local cfg = { nick = "Pavel_Garson", rank = 5 }
cfg[field] = value
Вызовы
Скобки ставьте всегда, даже если аргумент один: require("socket"), а не require "socket". Для коротких условий подходит «тернарник» через and/or:
local label = is_online and "в сети" or "не в сети"
Он ломается, если среднее значение может быть false или nil, – в этом случае пишите обычный if.
Повторы
Повторяющийся код выносите в функцию. Но функция ради одного вызова – тоже лишняя: она только заставляет читателя прыгать по файлу.
Частые вопросы
Какой стиль имён принят в Lua?
Для функций и переменных – snake_case. Функции-проверки удобно начинать с is_, например is_player_alive.
Какие кавычки использовать для строк в Lua?
По умолчанию двойные. Одинарные – для отдельных символов и строк, внутри которых есть двойные кавычки.
Нужно ли ставить скобки при вызове функции с одним аргументом в Lua?
Да, всегда: require("socket"), а не require "socket". Так вызов сразу видно.