for العامة وbreak
استخدم for العامة مع pairs وipairs، وتحكّم في تدفق الحلقة باستخدام break
for العامة وbreak درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
بروتوكول for العامة
تعمل حلقة for العامة في Lua باستخدام دالة مُكرِّر. وصيغتها هي for vars in iter_func, state, init do. في كل تكرار، تستدعي Lua الدالة iter_func(state, lastVar) وتُسنِد القيم المُعادة إلى vars. وتتوقف الحلقة عندما تكون قيمة الإرجاع الأولى nil.
-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil) -- first entry
while key ~= nil do
print(key, val)
key, val = next(t, key) -- advance
endpairs() لجميع المفاتيح
تعيد pairs(t) مُكرِّرًا يمرّ على جميع أزواج المفتاح والقيمة في جدول، بما في ذلك المفاتيح النصية والمفاتيح الصحيحة والمفاتيح المختلطة. ولا يكون ترتيب التكرار للمفاتيح غير الصحيحة محددًا (ترتيب التجزئة). ويشمل التكرار جزء المصفوفة وجزء التجزئة معًا.
local config = {
host = "localhost",
port = 8080,
debug = true,
[1] = "first",
}
for key, value in pairs(config) do
print(key, value)
end
-- Prints all 4 entries in any orderipairs() لمفاتيح المصفوفات
تكرّر ipairs(t) على المفاتيح الصحيحة بدءًا من 1، وتتوقف عند أول قيمة nil. وهي آمنة ويمكن التنبؤ بسلوكها وتحافظ على الترتيب. استخدم ipairs مع الجداول الشبيهة بالمصفوفات عندما يكون الترتيب مهمًا وتريد التوقف عند أول فجوة.
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
print(i, v) -- only 1,10 and 2,20
endالمفاضلة بين pairs و ipairs
اعرف متى تستخدم كلًّا منهما: فـ ipairs للمصفوفات المتسلسلة المرتبة، بينما pairs للقواميس أو الجداول المختلطة. تتوقف ipairs عند أول فجوة قيمتها nil، في حين تزور pairs كل مفتاح غير nil. وبالنسبة إلى المصفوفات الخالصة، تُعد ipairs الخيار الأكثر شيوعًا في Lua.
local mixed = {10, 20, key="val", 30}
-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
print(i, v) -- 1:10, 2:20, 3:30
end
-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
print(k, v) -- 1:10, 2:20, 3:30, key:val
endمُكرِّر مخصص باستخدام إغلاق
يمكنك كتابة مُكرِّرك الخاص على هيئة إغلاق. تعيد دالة المُنشئ إغلاقًا يحتفظ بحالته ويتقدم في الموضع عند كل استدعاء. وعندما لا يتبقى شيء لإعادته، يعيد nil لإيقاف حلقة for العامة.
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 n in range(1, 10, 2) do
io.write(n .. " ")
end
print() -- 1 3 5 7 9string.gmatch بوصفها مُكرِّرًا
تعيد string.gmatch(s, pattern) مُكرِّرًا يمرّ على جميع التطابقات مع النمط في السلسلة s. ويُستخدم ذلك عادةً لتقسيم السلاسل، أو استخراج الرموز، أو العثور على جميع تكرارات نمط معيّن.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- foxاستخدام break في for العامة
يمكنك الخروج مبكرًا من حلقة for عامة باستخدام break. وهذا مفيد للبحث: كرّر حتى العثور على تطابق، ثم استخدم break. بعد الخروج، يستمر التنفيذ عند العبارة التي تأتي بعد end.
local inventory = {
{name="sword", damage=50},
{name="shield", armor=30},
{name="bow", damage=35},
}
local target = "shield"
for i, item in ipairs(inventory) do
if item.name == target then
print("Found at index", i)
break
end
endتعديل الجداول أثناء التكرار
لا تُدرج مفاتيح في جدول أو تحذفها أثناء التكرار باستخدام pairs() مطلقًا؛ فسلوك ذلك غير محدد، وقد تظهر بعض التغييرات بينما تُتجاهل تغييرات أخرى. وإذا احتجت إلى تعديل جدول، فاجمع التغييرات في قائمة مؤقتة وطبّقها بعد انتهاء الحلقة.
local t = {a=1, b=2, c=3, d=4}
local toDelete = {}
-- Collect keys to delete
for k, v in pairs(t) do
if v % 2 == 0 then
toDelete[#toDelete+1] = k
end
end
-- Delete after iteration
for _, k in ipairs(toDelete) do
t[k] = nil
end
-- t = {a=1, c=3}نمط التعداد
عندما تحتاج إلى الفهرس والقيمة معًا، استخدم ipairs الذي يوفر كليهما. وعندما تحتاج إلى القيم فقط ولا تهتم بالفهرس، يمكنك استخدام _ بوصفه اسمًا اصطلاحيًا لمتغير الفهرس الذي لا يهمك.
local colors = {"red", "green", "blue"}
-- With index
for i, color in ipairs(colors) do
print(i .. ": " .. color)
end
-- Ignore index with _
for _, color in ipairs(colors) do
print(color) -- just the values
endاستخدام next() مباشرةً
الدالة next(t, key) هي دالة المرور الأساسية. تعيد زوج المفتاح والقيمة التالي بعد key، أو nil إذا لم يتبقَّ المزيد. وتعطي next(t, nil) أول عنصر. ويمكنك استخدام next(t) ~= nil للتحقق من أن الجدول غير فارغ، وهو أسرع من العد.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- falseتحقق سريع
أي مُكرِّر يتوقف عند أول فجوة قيمتها nil في الجدول؟
مراجعة: for العامة و break
الملخص:
pairs(t)— جميع المفاتيح، بأي ترتيبipairs(t)— المفاتيح الصحيحة من 1 إلى n، بترتيب، وتتوقف عند nil- المكررات المخصصة: تعيد إغلاقًا يعيد nil لإيقاف التكرار
breakتخرج مبكرًا من الحلقة- لا تعدّل جدولًا أثناء التكرار باستخدام pairs؛ اجمع التغييرات وطبّقها بعد ذلك
next(t) == nil— تحقق سريع من فراغ الجدول
الأسئلة الشائعة
هل درس «for العامة وbreak» مجاني؟
نعم — نص درس «for العامة وbreak» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «for العامة وbreak»؟
استخدم for العامة مع pairs وipairs، وتحكّم في تدفق الحلقة باستخدام break تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «for العامة وbreak»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عبارات if وelseif وelse
- حلقات while وrepeat-until
- حلقة for الرقمية
- for العامة وbreak