Menu
CoddyTech

حلقة repeat-until

جزء من قسم الأساسيات في رحلة Lua على Coddy. الدرس 72 من 90.

توفّر Lua نوعًا آخر من الحلقات يُسمّى حلقة repeat-until، ولها خاصية فريدة تميّزها عن حلقة while التي تعلّمتها للتو. والفرق الأساسي هو أن حلقة repeat-until تنفّذ كتلة التعليمات البرمجية الخاصة بها مرة واحدة على الأقل دائمًا، بغض النظر عن الشرط.

تبدو البنية النحوية هكذا:

repeat
    -- الكود المراد تكراره
until condition

لاحظ أن الشرط يُفحَص في النهاية، بعد أن يكون الكود قد نُفِّذ مرة واحدة بالفعل. تستمر الحلقة في التكرار حتى يصبح الشرط true - وهذا عكس حلقة while التي تستمر ما دام الشرط true.

إليك مثالًا عمليًا يحاكي رمي حجر نرد حتى تحصل على الرقم 6:

local roll = 0

repeat
    roll = math.random(1, 6) -- يولّد رقمًا عشوائيًا بين 1 و6
    print("Rolled:", roll)
until roll == 6

print("Finally got a 6!")

تضمن هذه الحلقة أنك سترمي النرد مرة واحدة على الأقل، وتستمر في رميه حتى يصبح الشرط roll == 6 صحيحًا. هذا السلوك المتمثل في «التنفيذ أولًا، ثم التحقق لاحقًا» يجعل حلقات repeat-until مثالية للحالات التي تحتاج فيها إلى حدوث شيء مرة واحدة على الأقل قبل أن تقرر ما إذا كنت ستتابع.

challenge icon

التحدي

سهل

أنت تنشئ محاكاة بسيطة للتحقق من كلمة المرور.

  1. أنشئ متغيرًا باسم password واجعله سلسلة فارغة ("").
  2. أنشئ متغيرًا آخر باسم correctPassword واجعله "secure123".
  3. أنشئ جدولًا باسم attempts يحتوي على محاولات كلمات المرور التالية بالترتيب:
    • "password"
    • "123456"
    • "admin"
    • "secure123"
  4. أنشئ متغيرًا باسم index واجعله 1. ستستخدمه لتتبّع المحاولة الحالية.
  5. استخدم حلقة repeat-until من أجل:
    • أسند المحاولة الحالية إلى password باستخدام attempts[index]. يقرأ هذا العنصر الموجود في الموضع index من الجدول
    • اطبع password الحالية
    • زِد index بمقدار 1 (مثلًا index = index + 1) للانتقال إلى المحاولة التالية
  6. يجب أن تتوقف الحلقة فقط عندما تكون password مساويةً لـ correctPassword.

في كل مرة تُنفَّذ فيها الحلقة، تقرأ محاولة واحدة من الجدول وتطبعها، ثم تنتقل إلى المحاولة التالية. تستمر الحلقة حتى يُعثر على كلمة المرور الصحيحة.

جرّب بنفسك

-- هيّئ المتغيرات
local password = ""
local correctPassword = "secure123"

-- قائمة محاولات إدخال كلمة المرور
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1

-- TODO:
-- استخدم حلقة repeat-until من أجل:
-- 1. إسناد المحاولة الحالية إلى password
-- 2. طباعة كلمة المرور المُجرَّبة
-- 3. الانتقال إلى المحاولة التالية
-- توقّف عندما تتطابق password مع correctPassword
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم Lua عبر الإنترنت