Skip to content

Latest commit

 

History

History
179 lines (135 loc) · 5.04 KB

ru.md

File metadata and controls

179 lines (135 loc) · 5.04 KB

Стандарт GLua

1. Форматирование

  1. Используйте 4 пробела для каждого уровня отступа.
  2. Нет разницы между использованием двойных кавычек " и одинарных кавычек '.
  3. Пробелы ставятся вокруг операторов и после запятых, но не внутри скобок и после имён функций.
-- Правильно
x = 10
fruits = {"apple", "banana", "orange", "kiwi", "pineapple"}

-- Неправильно
x=10
fruits = {"apple","banana","orange","kiwi","pineapple"}
  1. Избегайте лишних пробелов вокруг круглых, квадратных и фигурных скобок.
-- Правильно
function foo(x)
    return x * 2
end

local tabl = {key = "value"}
local myArray = {1, 2, 3, 4, 5}

-- Неправильно
function foo( x )
    return x * 2
end

local tabl = { key = "value" }
local myArray = { 1, 2, 3, 4, 5 }
  1. Если нужен невидимый элемент VGUI, не создавайте пустую функцию рисования — присвойте её nil.
-- Правильно
local pan = vgui.Create("DPanel")
pan.Paint = nil

-- Неправильно
local pan = vgui.Create("DPanel")
pan.Paint = function() end
  1. Используйте _ для игнорируемых переменных.
for _, item in ipairs(items) do
    foo(item)
end
  1. Функции и методы пишутся с заглавной буквы, свойства объектов всегда с маленькой буквы.
  2. Аргументы в функциях пишутся с маленькой буквы.
  3. Предпочитайте использовать Is при именовании булевых функций.
local function IsEven(x)
    return x % 2 == 0
end
  1. Предпочитайте синтаксис функции вместо синтаксиса переменной.
-- Правильно
local function eat()
    ...
end

-- Неправильно
local eat = function()
    ...
end
  1. Используйте точечную нотацию для доступа к известным свойствам.
local Person = {
    age = 20
}

-- Правильно
Person.age

-- Неправильно
Person["age"]
  1. false и nil являются ложными значениями в условных выражениях.
-- Правильно
if name then
    ...
end

-- Неправильно
if name != nil then
    ...
end
  1. Ставьте пробел после // и --.
  2. Избегайте выравнивания объявлений переменных.
-- Неправильно
local a               = 1
local long_identifier = 2
  1. Используйте имена сетевых запросов, учитывая скрипт/аддон, к которому они принадлежат, и их роль.
-- Примеры
util.AddNetworkString("GangSystem-InvitePlayer")
util.AddNetworkString("HatShop-Buy")
  1. При отправке сетевого запроса вложенный синтаксис записи данных должен сохраняться.
net.Start("Test")
    net.WriteString("Hello World")
    net.WriteTable({6, 8, 10, 12})
net.SendToServer()
  1. При написании блока/блоков кода используйте один и тот же стиль имен переменных.
  2. Имя хука должно указывать на аддон/скрипт, к которому принадлежит код, и на значение хука.
hook.Add("PlayerSay", "AutoDonate.OpenMenu", function(pl, text)
    if text == "/donate" then
        pl:ConCommand("autodonate_menu")
    end
end)
  1. При объявлении переменных цвета и материала указывайте их принадлежность.
local color_button = Color(75, 75, 75)
local mat_medal = Material("icon16/rosette.png")
  1. Если в кодовом блоке есть итерация, кэшируйте переменные.
local color_text = Color(25, 25, 25)

hook.Add("HUDPaint", "CustomHUD.Test", function()
    draw.SimpleText("Hello there", "TargetID", 25, 25, color_text)
end)
-- Где-то во время создания интерфейса

local pl_nick = LocalPlayer():Name()

pnl.Paint = function(_, w, h)
    draw.RoundedBox(6, 0, 0, w, h, color_black)
    draw.SimpleText(pl_nick, "Trebuchet24", w * 0.5, h * 0.5, color_white, 1, 1)
end

2. Структура файлов

  1. Файлы GLua должны именоваться строчными буквами.
  2. Посвятите отдельную папку для вашего аддона в каталоге lua/. Ссылайтесь на неё через файл *_autorun.lua в lua/autorun/.