حلقة for الرقمية
كرّر عبر نطاقات رقمية باستخدام صياغة for i=start,limit,step
حلقة for الرقمية درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
صيغة for الرقمية
تأخذ حلقة for الرقمية في Lua الصيغة for var = start, limit, step do. وتكون قيمة step الافتراضية 1 إذا لم تُذكر. يكون متغير الحلقة محليًا داخل جسم الحلقة، ولا يمكن تعديله داخله. ويُقيَّم الحد وقيمة الخطوة مرة واحدة قبل بدء الحلقة.
-- Count 1 to 5
for i = 1, 5 do
io.write(i .. " ")
end
print() -- 1 2 3 4 5
-- Count with step 2
for i = 1, 10, 2 do
io.write(i .. " ")
end
print() -- 1 3 5 7 9العد التنازلي بخطوة سالبة
استخدم خطوة سالبة للعد التنازلي. تستمر الحلقة ما دام var >= limit (عندما تكون الخطوة سالبة). وإذا كانت قيمة البداية أقل من الحد أصلًا مع استخدام خطوة سالبة، فلن يُنفَّذ جسم الحلقة مطلقًا.
for i = 10, 1, -1 do
io.write(i .. " ")
end
print()
-- 10 9 8 7 6 5 4 3 2 1
-- Step -2
for i = 10, 0, -2 do
io.write(i .. " ")
end
print()
-- 10 8 6 4 2 0متغير الحلقة محلي
يكون متغير التحكم في الحلقة (i) محليًا تلقائيًا. ولا يمكنك تغيير قيمته داخل الحلقة؛ إذ تتجاهل Lua عمليات الإسناد إلى متغير الحلقة. ولتتبّع التكرارات بطريقة مختلفة، استخدم متغيرًا محليًا منفصلًا.
for i = 1, 5 do
-- i is read-only inside the loop
-- i = i + 10 -- this creates a new global i, not the loop var
print(i) -- always 1, 2, 3, 4, 5 as expected
end
-- i is nil here (it was local to the loop)
print(i) -- nil (or whatever global i was)تكرار عناصر المصفوفات
الاستخدام الأكثر شيوعًا لـ for الرقمية هو تكرار عناصر المصفوفات باستخدام الفهرس. استخدم #arr حدًا للحلقة. وبخلاف ipairs، تتيح لك هذه الصيغة التحكم في حجم الخطوة والتكرار بترتيب عكسي، وهي أسرع قليلًا للمصفوفات الكثيفة.
local fruits = {"apple", "banana", "cherry", "date"}
for i = 1, #fruits do
print(i, fruits[i])
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- 4 dateالجمع باستخدام for
تُعد حلقات for الرقمية مثالية لتجميع القيم عبر المصفوفات. والنمط واحد دائمًا: هيّئ متغير النتيجة قبل الحلقة، وحدّثه داخلها، ثم استخدمه بعدها.
local values = {10, 20, 30, 40, 50}
local total = 0
for i = 1, #values do
total = total + values[i]
end
print("Total:", total) -- 150
print("Count:", #values) -- 5
print("Mean:", total / #values) -- 30تداخل حلقات for الرقمية
يمكن تداخل حلقتي for رقميتين لتنفيذ عمليات ثنائية الأبعاد، مثل المرور على مصفوفة أو جدول من الجداول أو إنشاء أزواج الإحداثيات. تتعامل الحلقة الخارجية مع الصفوف، والداخلية مع الأعمدة؛ إذ يصل كل تكرار إلى خلية واحدة.
local rows, cols = 3, 4
for r = 1, rows do
for c = 1, cols do
io.write(string.format("%2d ", r * c))
end
print()
end
-- 1 2 3 4
-- 2 4 6 8
-- 3 6 9 12الخطوات الكسرية
يمكن أن تكون الخطوة والحدود أعدادًا بفاصلة عائمة، غير أن ذلك قد يؤدي إلى أخطاء في الدقة. وللحصول على عدد تكرارات دقيق، التزم بالأعداد الصحيحة. وإذا اضطررت إلى استخدام الأعداد العشرية، فاعلم أن عدد التكرارات يُحسب وفق الصيغة floor((limit - start) / step) + 1.
-- Float step
for x = 0.0, 1.0, 0.25 do
io.write(x .. " ")
end
print()
-- 0.0 0.25 0.5 0.75 1.0
-- Prefer integer math when possible
for i = 0, 4 do
local x = i * 0.25
io.write(x .. " ")
endبناء جدول للنتائج
تُعد حلقة for الرقمية الطريقة القياسية لبناء جدول جديد من بيانات موجودة. أنشئ جدولًا فارغًا، ثم استخدم الحلقة لملئه حسب الفهرس.
local source = {1, 2, 3, 4, 5}
local squares = {}
for i = 1, #source do
squares[i] = source[i] ^ 2
end
for i = 1, #squares do
print(squares[i]) -- 1, 4, 9, 16, 25
endاستخدام break في for الرقمية
يمكنك الخروج مبكرًا من حلقة for رقمية باستخدام break. ينتقل التنفيذ إلى العبارة التي تأتي بعد end. وهذا مفيد للبحث الخطي: كرّر حتى العثور على الهدف، ثم استخدم break.
local data = {5, 3, 8, 1, 9, 2, 7}
local target = 9
local foundAt = nil
for i = 1, #data do
if data[i] == target then
foundAt = i
break
end
end
if foundAt then
print("Found at index " .. foundAt) -- 5
else
print("Not found")
endحساب عدد التكرارات
يُحسب عدد تكرارات for i = start, limit, step وفق الصيغة max(0, floor((limit - start) / step) + 1). يساعد فهم ذلك على تجنب أخطاء حدود التكرار. عندما تكون الخطوة 1، يكون العدد ببساطة limit - start + 1.
-- How many iterations?
local count = 0
for i = 1, 10, 3 do
count = count + 1
end
print(count) -- 4 (i = 1, 4, 7, 10)
count = 0
for i = 5, 1 do -- step=1 but start > limit
count = count + 1
end
print(count) -- 0 (no iterations)تحقق سريع
ما القيم التي يكرّر عليها for i = 10, 1, -3 do؟
مراجعة: for الرقمية
الملخص:
for i = start, limit, step do— تكون الخطوة الافتراضية 1- استخدم خطوة سالبة للعد التنازلي
- يكون متغير الحلقة محليًا تلقائيًا ولا يمكن الكتابة إليه
- يُقيَّم الحد والخطوة مرة واحدة قبل بدء الحلقة
breakتخرج مبكرًا من الحلقة- النمط القياسي: بناء جداول النتائج، والبحث في المصفوفات، وتجميع المجاميع
الأسئلة الشائعة
هل درس «حلقة for الرقمية» مجاني؟
نعم — نص درس «حلقة for الرقمية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «حلقة for الرقمية»؟
كرّر عبر نطاقات رقمية باستخدام صياغة for i=start,limit,step تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «حلقة for الرقمية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.