0Pricing
Lua Academy · Aula

Criando uma DSL de configuração

Crie uma linguagem de configuração declarativa carregada por dofile() em um sandbox.

Criando uma DSL de configuração é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Objetivo: configuração declarativa

Uma DSL de configuração permite que os usuários expressem configurações em um estilo legível e declarativo, enquanto usa todo o poder do Lua (condicionais, laços e funções) nos bastidores.

Padrão de função de configuração

Exponha uma função config(tbl) que valide e armazene a configuração. Chame-a com um literal de tabela para obter uma sintaxe limpa.

local function config(tbl)
  -- validate and store
  return tbl
end
-- config.lua:
return config {
  host = "localhost",
  port = 8080,
  debug = os.getenv("DEBUG") == "1",
}

Configuração aninhada com seções

Ofereça suporte a seções aninhadas para organizar a configuração.

return config {
  database = { host="db.local", port=5432 },
  cache    = { host="cache.local", ttl=300 },
  logging  = { level="INFO", file="/var/log/app.log" },
}

Funções auxiliares na configuração

Permita chamar funções auxiliares dentro da configuração para obter valores calculados.

local function env(name, default)
  return os.getenv(name) or default
end
return config {
  host  = env("DB_HOST", "localhost"),
  port  = tonumber(env("DB_PORT", "5432")),
}

Carregamento seguro da configuração

Por segurança, carregue a configuração em um ambiente restrito que permita somente funções auxiliares seguras.

local function loadConfig(path)
  local safeEnv = {
    config = config,
    env    = env,
    math   = math,
    table  = table,
  }
  local fn, err = loadfile(path, "t", safeEnv)
  if not fn then error(err) end
  return fn()
end

Validação de esquema

Valide os campos e tipos obrigatórios após o carregamento.

local function validate(cfg)
  assert(type(cfg.host) == "string", "host must be string")
  assert(type(cfg.port) == "number", "port must be number")
  assert(cfg.port > 0 and cfg.port < 65536, "port out of range")
end
validate(loadConfig("config.lua"))

Valores padrão

Mescle a configuração carregada com os valores padrão para garantir que todas as chaves obrigatórias tenham valores.

local defaults = {host="localhost", port=8080, debug=false}
local function loadWithDefaults(path)
  local cfg = loadConfig(path)
  for k, v in pairs(defaults) do
    if cfg[k] == nil then cfg[k] = v end
  end
  return cfg
end

Substituição pelo ambiente

Permita que as variáveis de ambiente substituam os valores do arquivo de configuração — algo essencial para o projeto de aplicações de 12 fatores.

Herança de configuração

Carregue uma configuração base e then sobreponha a configuração específica do ambiente (desenvolvimento, homologação e produção).

Configuração imutável

Após o carregamento, congele a tabela de configuração com um __newindex que gere um erro, impedindo alterações acidentais durante a execução.

Documentação na configuração

Use comentários e nomes de chaves estruturados como documentação própria. Uma DSL de configuração bem projetada é autoexplicativa para equipes de DevOps.

Pergunta sobre DSL de configuração

Por que carregar um arquivo de configuração com um _ENV restrito?

Recapitulação: criando uma DSL de configuração

Exponha uma função config(tbl). Ofereça suporte a seções aninhadas e funções auxiliares. Carregue a configuração em um ambiente restrito. Valide os campos e tipos obrigatórios. Forneça valores padrão e permita substituições por variáveis de ambiente para cumprir os princípios dos 12 fatores.

Perguntas Frequentes

A aula “Criando uma DSL de configuração” é grátis?

Sim — o texto completo de “Criando uma DSL de configuração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Criando uma DSL de configuração”?

Crie uma linguagem de configuração declarativa carregada por dofile() em um sandbox. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Criando uma DSL de configuração”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Princípios de design de DSL em Lua
  2. Sobrecarga de operadores para fluência em DSL
  3. Criando uma DSL de configuração
  4. Analisador simples de expressões
← Voltar para Lua Academy