0Pricing
Lua Academy · Pelajaran

Membangun DSL Konfigurasi

Buat bahasa konfigurasi deklaratif yang dimuat melalui dofile() dalam sandbox.

Membangun DSL Konfigurasi adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Tujuan: Konfigurasi Deklaratif

DSL konfigurasi memungkinkan pengguna menyatakan konfigurasi dengan gaya yang mudah dibaca dan deklaratif, sambil menggunakan seluruh kemampuan Lua (percabangan, perulangan, dan fungsi) di balik layar.

Pola Fungsi Konfigurasi

Sediakan fungsi config(tbl) yang memvalidasi dan menyimpan konfigurasi. Panggil fungsi tersebut dengan literal tabel agar sintaksnya tetap rapi.

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

Konfigurasi Bertingkat dengan Bagian

Dukung bagian bertingkat untuk mengatur konfigurasi dengan rapi.

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

Fungsi Pembantu dalam Konfigurasi

Izinkan pemanggilan fungsi pembantu di dalam konfigurasi untuk menghasilkan nilai yang dihitung.

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

Pemuatan Konfigurasi Terisolasi

Demi keamanan, muat konfigurasi dalam lingkungan terbatas yang hanya mengizinkan fungsi pembantu yang aman.

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

Validasi Skema

Validasi bidang dan tipe yang wajib diisi setelah pemuatan.

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

Nilai Bawaan

Gabungkan konfigurasi yang dimuat dengan nilai bawaan untuk memastikan semua kunci wajib memiliki nilai.

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

Pengesampingan oleh Lingkungan

Izinkan variabel lingkungan menimpa nilai berkas konfigurasi — hal yang penting untuk desain aplikasi 12 faktor.

Pewarisan Konfigurasi

Muat konfigurasi dasar, lalu lapisi dengan konfigurasi khusus lingkungan (pengembangan, praproduksi, produksi).

Konfigurasi yang Tidak Dapat Diubah

Setelah dimuat, bekukan tabel konfigurasi dengan __newindex yang memunculkan kesalahan, sehingga perubahan saat runtime yang tidak disengaja dapat dicegah.

Dokumentasi dalam Konfigurasi

Gunakan komentar dan nama kunci terstruktur sebagai dokumentasi mandiri. DSL konfigurasi yang dirancang dengan baik dapat dipahami oleh tim DevOps tanpa penjelasan tambahan.

Pertanyaan tentang DSL Konfigurasi

Mengapa berkas konfigurasi dimuat dengan _ENV yang terisolasi?

Ringkasan: Membangun DSL Konfigurasi

Sediakan fungsi config(tbl). Dukung bagian bertingkat dan fungsi pembantu. Muat konfigurasi dalam lingkungan terisolasi. Validasi bidang dan tipe yang wajib diisi. Sediakan nilai bawaan dan izinkan pengesampingan oleh variabel lingkungan untuk memenuhi prinsip 12 faktor.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Membangun DSL Konfigurasi” gratis?

Ya — teks lengkap “Membangun DSL Konfigurasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Membangun DSL Konfigurasi”?

Buat bahasa konfigurasi deklaratif yang dimuat melalui dofile() dalam sandbox. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Membangun DSL Konfigurasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Prinsip Desain DSL dalam Lua
  2. Pembebanan Operator untuk Keluwesan DSL
  3. Membangun DSL Konfigurasi
  4. Parser Ekspresi Sederhana
← Kembali ke Lua Academy