0Pricing
Lua Academy · درس

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

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

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