0Pricing
Lua Academy · درس

إنشاء DSL للإعدادات

أنشئ لغة إعدادات تصريحية تُحمّل عبر dofile() في بيئة معزولة

إنشاء DSL للإعدادات درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

الهدف: إعداد تصريحي

يتيح DSL للإعدادات للمستخدمين التعبير عن الإعدادات بأسلوب مقروء وتصريحي، مع استخدام كامل قوة Lua (الشروط والحلقات والدوال) في الخلفية.

نمط دالة الإعداد

وفّر دالة config(tbl) للتحقق من الإعدادات وتخزينها. واستدعها باستخدام literal لجدول، لتحصل على صياغة واضحة.

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

إعداد متداخل مع أقسام

ادعم الأقسام المتداخلة لتنظيم الإعدادات.

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

الدوال المساعدة في الإعداد

اسمح باستدعاء الدوال المساعدة داخل الإعداد لحساب القيم.

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

تحميل الإعدادات في بيئة معزولة

لأسباب أمنية، حمّل الإعدادات في بيئة مقيّدة لا تسمح إلا بالدوال المساعدة الآمنة.

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

التحقق من المخطط

تحقق من الحقول والأنواع المطلوبة بعد التحميل.

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

القيم الافتراضية

ادمج الإعدادات المحمّلة مع القيم الافتراضية لضمان امتلاك جميع المفاتيح المطلوبة قيمًا.

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

تجاوز الإعدادات من البيئة

اسمح لمتغيرات البيئة بتجاوز قيم ملف الإعدادات — فهذا أساسي لتصميم التطبيقات وفق منهجية 12-factor.

توريث الإعدادات

حمّل إعدادًا أساسيًا، ثم طبّق فوقه إعداد البيئة الخاص (التطوير أو الاختبار المرحلي أو الإنتاج).

الإعدادات غير القابلة للتغيير

بعد التحميل، جمّد جدول الإعدادات باستخدام __newindex يرفع خطأً، لمنع التغيير غير المقصود أثناء التشغيل.

التوثيق في الإعدادات

استخدم التعليقات وأسماء المفاتيح المنظمة لتوثيق الإعدادات ذاتيًا. يكون DSL للإعدادات المصمم جيدًا واضحًا بذاته لفرق DevOps.

سؤال حول DSL الإعدادات

لماذا يُحمَّل ملف الإعدادات باستخدام _ENV معزول؟

مراجعة: بناء DSL للإعدادات

وفّر دالة config(tbl). وادعم الأقسام المتداخلة والدوال المساعدة. وحمّل الإعدادات في بيئة معزولة. وتحقق من الحقول والأنواع المطلوبة. وقدّم قيمًا افتراضية واسمح بتجاوزها بواسطة متغيرات البيئة للامتثال لمنهجية 12-factor.

الأسئلة الشائعة

هل درس «إنشاء DSL للإعدادات» مجاني؟

نعم — نص درس «إنشاء DSL للإعدادات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «إنشاء DSL للإعدادات»؟

أنشئ لغة إعدادات تصريحية تُحمّل عبر dofile() في بيئة معزولة تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «إنشاء DSL للإعدادات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مبادئ تصميم DSL في Lua
  2. زيادة تحميل المعاملات لسلاسة DSL
  3. إنشاء DSL للإعدادات
  4. محلّل تعبيرات بسيط
← العودة إلى Lua Academy