0Pricing
Lua Academy · درس

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
end

‏pairs() لجميع المفاتيح

تعيد 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 order

‏ipairs() لمفاتيح المصفوفات

تكرّر 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 9

‏string.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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. عبارات if وelseif وelse
  2. حلقات while وrepeat-until
  3. حلقة for الرقمية
  4. for العامة وbreak
← العودة إلى Lua Academy