Lua Academy · Les

Een configuratie-DSL bouwen

Maak een declaratieve configuratietaal die via dofile() in een sandbox wordt geladen

Les 3 van 413 stappen

Een configuratie-DSL bouwen is een gratis Lua Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Doel: declaratieve configuratie

Met een configuratie-DSL kunnen gebruikers configuratie op een leesbare, declaratieve manier beschrijven, terwijl achter de schermen de volledige kracht van Lua wordt gebruikt (voorwaardelijke instructies, lussen en functies).

Patroon voor de configuratiefunctie

Stel een functie config(tbl) beschikbaar die configuratie controleert en opslaat. Roep deze aan met een tabel-literal voor een overzichtelijke syntaxis.

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

Geneste configuratie met secties

Ondersteun geneste secties voor een overzichtelijke configuratie.

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

Hulpfuncties in configuratie

Sta toe dat je binnen de configuratie hulpfuncties aanroept voor berekende waarden.

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")),
}

Configuratie laden in een afgeschermde omgeving

Laad de configuratie om veiligheidsredenen in een beperkte omgeving waarin alleen veilige hulpfuncties beschikbaar zijn.

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

Schemavalidatie

Controleer na het laden de verplichte velden en typen.

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"))

Standaardwaarden

Voeg de geladen configuratie samen met standaardwaarden, zodat alle verplichte sleutels een waarde hebben.

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

Overschrijven vanuit de omgeving

Sta toe dat omgevingsvariabelen waarden uit het configuratiebestand overschrijven — essentieel voor het ontwerp van 12-factorapplicaties.

Overerving van configuratie

Laad eerst een basisconfiguratie en leg daar vervolgens een omgevingsspecifieke configuratie overheen (ontwikkeling, testomgeving, productie).

Onveranderlijke configuratie

Bevries de configuratietabel na het laden met een __newindex die een fout opwerpt, zodat onbedoelde wijzigingen tijdens runtime worden voorkomen.

Documentatie in configuratie

Gebruik opmerkingen en gestructureerde sleutelnamen als zelfdocumentatie. Een goed ontworpen configuratie-DSL spreekt voor DevOps-teams voor zich.

Vraag over configuratie-DSL

Waarom laad je een configuratiebestand met een afgeschermde _ENV?

Samenvatting: een configuratie-DSL bouwen

Stel een functie config(tbl) beschikbaar. Ondersteun geneste secties en hulpfuncties. Laad de configuratie in een afgeschermde omgeving. Controleer verplichte velden en typen. Bied standaardwaarden en sta overschrijvingen door omgevingsvariabelen toe voor naleving van 12-factorprincipes.

Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Een configuratie-DSL bouwen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Een configuratie-DSL bouwen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Een configuratie-DSL bouwen”?

Maak een declaratieve configuratietaal die via dofile() in een sandbox wordt geladen Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Een configuratie-DSL bouwen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Ontwerpprincipes voor DSL's in Lua
  2. Operatoroverloading voor vloeiende DSL's
  3. Een configuratie-DSL bouwen
  4. Eenvoudige expressieparser
← Terug naar Lua Academy