المكرّرات عديمة الحالة
اكتب مكرّرات عديمة الحالة مثل ipairs ونفّذ أنواعًا مخصصة منها
المكرّرات عديمة الحالة درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
ما المكرّر عديم الحالة؟
المكرّر عديم الحالة لا يحمل حالة داخلية. وتُمرّر جميع المعلومات بوصفها وسائط في كل استدعاء: الحالة الثابتة ومتغير التحكم الحالي.
ipairs: المثال النموذجي
إن ipairs عديم الحالة؛ فهو يستخدم الجدول بوصفه الحالة، والفهرس الحالي بوصفه متغير التحكم.
local function myIpairs(t, i)
i = i + 1
local v = t[i]
if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 doمكرّر squares
مكرّر عديم الحالة يُرجع مربعات متتالية. وتحتفظ الحالة بالحد، بينما يكون متغير التحكم هو العدد الحالي.
local function squaresIter(max, n)
n = n + 1
if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
print(n, sq)
endلا حاجة إلى إغلاق
تتجنب المكرّرات عديمة الحالة تخصيص إغلاق. وبما أن الحالة كلها تُمرّر بوصفها وسائط، فلا يحدث أي تخصيص في الكومة لكل تكرار.
تطبيق مكرّر بأسلوب pairs
مكرّر عديم الحالة للمفاتيح والقيم يستخدم next بوصفها دالة المكرّر، تمامًا كما تعمل pairs.
for k, v in next, {a=1, b=2} do
print(k, v)
endدالة next
تُرجع next(t, k) زوج المفتاح والقيمة التالي بعد المفتاح k. مرّروا nil (أو احذفوه) للبدء من البداية.
local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)مكرّر نطاق مخصص
مكرّر نطاق عديم الحالة بخطوة. وتحتفظ الحالة بجدول إعداد، بينما يكون متغير التحكم هو القيمة الحالية.
local function rangeIter(state, n)
n = n + state.step
if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
print(v)
endميزة الأداء
تُعد المكرّرات عديمة الحالة مثالية للحلقات المكثفة. فلا يُنشأ إغلاق عند كل استدعاء، مما يجعلها أسرع من مكرّرات الإغلاقات ذات الحالة في عمليات المرور البسيطة.
القيود
عندما يتطلب التكرار حالة معقدة (مثل عدادات متعددة أو قوائم انتظار أو بيانات ديناميكية)، تصبح المكرّرات عديمة الحالة غير ملائمة. استخدموا بدلًا منها مكرّرات الإغلاقات ذات الحالة أو التعاونيات.
الدمج مع table.move
يُرجع مكرّر المقاطع عديم الحالة العناصر من مقطع في جدول. وتحتفظ الحالة الثابتة بالمصفوفة وفهرس النهاية، بينما يكون متغير التحكم هو الفهرس الحالي.
المكرّرات عديمة الحالة في المكتبة القياسية
تستخدم ipairs وpairs (عبر next) وstring.gmatch داخليًا تصميمات عديمة الحالة أو شبه عديمة الحالة.
سؤال عن المكرّر عديم الحالة
ما الذي يجعل المكرّر عديم الحالة؟
مراجعة: المكرّرات عديمة الحالة
تتلقى المكرّرات عديمة الحالة كل السياق بوصفه وسائط، ولا تتطلب تخصيص إغلاق، وتتمتع بأداء عالٍ. وهي مثالية لعمليات المرور التسلسلية البسيطة مثل فهرسة المصفوفات.
الأسئلة الشائعة
هل درس «المكرّرات عديمة الحالة» مجاني؟
نعم — نص درس «المكرّرات عديمة الحالة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «المكرّرات عديمة الحالة»؟
اكتب مكرّرات عديمة الحالة مثل ipairs ونفّذ أنواعًا مخصصة منها تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «المكرّرات عديمة الحالة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بروتوكول for العامة
- المكرّرات عديمة الحالة
- المكرّرات ذات الحالة باستخدام الإغلاقات
- المولّدات المعتمدة على البرامج التعاونية