بروتوكول for العامة
افهم بروتوكول المكرّر ذي القيم الثلاث: دالة المكرّر والحالة ومتغير التحكم
بروتوكول for العامة درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
آلية عمل for العام
تستدعي عبارة for دالة مكرّر في كل تكرار. وتمرّر إليها حالة ومتغير تحكم، وتتوقف عندما تُرجع الدالة nil.
إرجاع ثلاث قيم
for var in iter, state, init do — تفكك Lua هذا إلى: دالة المكرّر iter، والحالة الثابتة state، ومتغير التحكم الابتدائي init.
بروتوكول ipairs
تُرجع ipairs(t) دالة مكرّر عديمة الحالة، والجدول بوصفه حالة، و0 بوصفه متغير تحكم ابتدائيًا. ويُرجع كل استدعاء الفهرس والقيمة التاليين.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endمكرّر مخصص بثلاث قيم
طبّقوا مكرّرًا مخصصًا عديم الحالة بتوفير القيم الثلاث كلها صراحةً.
local function iter(t, i)
i = i + 1
local v = t[i]
if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
print(i, v)
endالتبسيط باستخدام إغلاق
لا يحتاج المكرّر المعتمد على إغلاق إلا إلى إرجاع دالة المكرّر (فلا حاجة إلى حالة أو متغير تحكم، إذ يعيشان في القيم العلوية).
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({1,2,3}) do print(v) endينهي nil الحلقة
تخرج حلقة for العامة فور إرجاع دالة المكرّر nil بوصفها قيمة الإرجاع الأولى. وهذا هو عقد الإنهاء.
قيم إرجاع متعددة
يمكن للمكرّر إرجاع قيم متعددة، وتُطابق كل قيمة متغيرًا في الحلقة: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endاستخدام وسيط الحالة
يُمرّر وسيط الحالة من دون تغيير إلى كل استدعاء للمكرّر. وبالنسبة إلى المكرّرات عديمة الحالة، يحتفظ هذا الوسيط بكل السياق المطلوب (مثل الجدول نفسه).
استخدام coroutine.wrap كمكرّر
تُرجع coroutine.wrap(fn) دالةً تستأنف التعاونية عند كل استدعاء؛ وتصبح القيم المُنتجة قيم إرجاع، مما يجعلها مناسبة تمامًا لتكون مكرّرًا في for العامة.
local function countdown(n)
return coroutine.wrap(function()
for i = n, 1, -1 do coroutine.yield(i) end
end)
end
for v in countdown(5) do print(v) endتركيب المكرّرات
يمكن تركيب المكرّرات: لفّ مكرّر داخل آخر لإضافة التصفية أو التحويل.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endالمكرّرات اللانهائية
يؤدي المكرّر الذي لا يُرجع nil أبدًا إلى إنشاء حلقة لا نهائية. احرصوا دائمًا على توفير شرط إنهاء أو break.
local function naturals()
local n = 0
return function() n = n+1; return n end
end
for v in naturals() do
if v > 5 then break end
print(v)
endسؤال عن for العامة
متى تتوقف حلقة for العامة؟
مراجعة: بروتوكول for العامة
تستدعي for العامة دالة مكرّر باستخدام حالة ثابتة ومتغير تحكم. وتتوقف عند nil. وتبسّط الإغلاقات المكرّرات ذات الحالة بترميز الحالة في القيم العلوية.
الأسئلة الشائعة
هل درس «بروتوكول for العامة» مجاني؟
نعم — نص درس «بروتوكول for العامة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «بروتوكول for العامة»؟
افهم بروتوكول المكرّر ذي القيم الثلاث: دالة المكرّر والحالة ومتغير التحكم تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بروتوكول for العامة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بروتوكول for العامة
- المكرّرات عديمة الحالة
- المكرّرات ذات الحالة باستخدام الإغلاقات
- المولّدات المعتمدة على البرامج التعاونية