0Pricing
Lua Academy · درس

دوال المصنع والمولّدات

استخدم الإغلاقات بوصفها دوال مصنع لإنتاج نسخ دوال مهيّأة

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

ما دالة المصنع؟

دالة المصنع هي دالة تُنشئ دوال أخرى وتُرجعها، مع إعدادها بواسطة وسيطاتها وقيمها العلوية.

مصنع مضاعِفات بسيط

يُرجع كل استدعاء لـ multiplier إغلاقًا جديدًا يلتقط factor مختلفًا.

local function multiplier(factor)
  return function(x) return x * factor end
end
local double = multiplier(2)
local triple = multiplier(3)
print(double(5))  -- 10
print(triple(5))  -- 15

مصنع مسجّل قابل للتهيئة

يلتقط مصنع المسجّل سلسلة بادئة ويُرجع دالة تسجيل.

local function makeLogger(prefix)
  return function(msg)
    print("[" .. prefix .. "] " .. msg)
  end
end
local info = makeLogger("INFO")
local warn = makeLogger("WARN")
info("started")
warn("low memory")

مولّد العدادات

يحتفظ المولّد بحالة داخلية وينتج قيمة جديدة عند كل استدعاء.

local function counter(start, step)
  local n = start - step
  return function()
    n = n + step
    return n
  end
end
local evens = counter(0, 2)
print(evens(), evens(), evens())  -- 0 2 4

مولّد النطاقات

ينتج مولّد النطاقات القيم من from إلى to، ويُرجع nil عند استنفادها.

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end
for v in range(1, 5) do print(v) end

التطبيق الجزئي

يطبّق المصنع الوسيطات جزئيًا لإنشاء إصدار متخصص من الدالة.

local function partial(fn, ...)
  local args = {...}
  return function(...)
    local all = {table.unpack(args)}
    for _, v in ipairs({...}) do all[#all+1] = v end
    return fn(table.unpack(all))
  end
end
local add = function(a,b) return a+b end
local add10 = partial(add, 10)
print(add10(5))  -- 15

مصنع التخزين المؤقت

يمكن للمصنع إنشاء إصدار يستخدم التخزين المؤقت من دالة مكلفة حسابيًا.

local function memoize(fn)
  local cache = {}
  return function(x)
    if cache[x] == nil then cache[x] = fn(x) end
    return cache[x]
  end
end

محلّل رموز ذي حالة

يلتقط مصنع المحلّل سلسلة الإدخال وموضعها، وينتج الرمز التالي عند كل استدعاء.

local function lexer(input)
  local pos = 1
  return function()
    if pos > #input then return nil end
    local token = input:match("%S+", pos)
    if token then pos = pos + #token + 1 end
    return token
  end
end

المولّدات في مقابل التعاونيات

المولّدات المعتمدة على الإغلاقات أبسط، لكنها تحتفظ بالحالة كلها في القيم العلوية. أما المولّدات المعتمدة على التعاونيات فهي أكثر قوة، إذ تتيح استخدام yield في أي موضع ضمن منطق معقد.

قوالب الدوال

تنشئ المصانع قوالب دوال؛ أي أنماطًا شائعة تُحدّد معلماتها وقت الإنشاء، ويمكن إعادة استخدامها مرات كثيرة بإعدادات مختلفة.

الكاريّة

تأخذ الدالة الكاريّة الوسيطات واحدًا تلو الآخر، وتُرجع دالة جديدة حتى توفير جميع الوسيطات.

local function curry2(fn)
  return function(a)
    return function(b)
      return fn(a, b)
    end
  end
end
local curriedAdd = curry2(function(a,b) return a+b end)
print(curriedAdd(3)(4))  -- 7

سؤال عن المصنع

ما السمة الأساسية لدوال المصنع؟

مراجعة: دوال المصنع

تنتج دوال المصنع إغلاقات مُهيّأة، مما يتيح التطبيق الجزئي والمولّدات والتخزين المؤقت والكاريّة. وهي من أقوى الأنماط الوظيفية في Lua.

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

هل درس «دوال المصنع والمولّدات» مجاني؟

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

ماذا ستتعلم في «دوال المصنع والمولّدات»؟

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

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

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

كم من الوقت يستغرق درس «دوال المصنع والمولّدات»؟

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

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

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

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

  1. ما المقصود بـ Upvalues؟
  2. مشاركة Upvalues بين الإغلاقات
  3. دوال المصنع والمولّدات
  4. التخزين المؤقت بالاعتماد على الإغلاقات
← العودة إلى Lua Academy