حلقة repeat-until
جزء من قسم الأساسيات في رحلة Lua على Coddy. الدرس 72 من 90.
توفّر Lua نوعًا آخر من الحلقات يُسمّى حلقة repeat-until، وتتميّز بخاصية فريدة تميّزها عن حلقة while التي تعلّمتها للتو. والفرق الأساسي هو أن حلقة repeat-until تنفّذ دائمًا كتلة التعليمات البرمجية الخاصة بها مرة واحدة على الأقل، بغضّ النظر عن الشرط.
تبدو الصياغة النحوية هكذا:
repeat
-- الكود للتكرار
until conditionلاحظ أن condition يتم التحقق منها في النهاية، بعد أن يكون الكود قد نُفّذ مرة واحدة بالفعل. يستمر loop في التكرار until تصبح condition true - وهذا عكس حلقة while التي تستمر ما دامت condition هي true.
إليك مثالًا عمليًا يحاكي رمي نرد حتى تحصل على الرقم 6:
local roll = 0
repeat
roll = math.random(1, 6) -- يرمي رقماً بين 1 و 6
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")تضمن حلقة loop هذه أنك سترمي النرد مرة واحدة على الأقل، وتستمر في الرمي حتى يصبح الشرط roll == 6 صحيحًا. هذا السلوك المتمثل في «التنفيذ أولًا، والتحقق لاحقًا» يجعل حلقات repeat-until مثالية للمواقف التي تحتاج فيها إلى حدوث شيء ما مرة واحدة على الأقل قبل اتخاذ قرار بشأن الاستمرار.
التحدي
سهلأنت تنشئ محاكاة بسيطة للتحقق من كلمة المرور.
- أنشئ متغيرًا يُسمى
passwordواضبطه على سلسلة نصية فارغة (""). - أنشئ متغيرًا آخر يُسمى
correctPasswordواضبطه على"secure123". - أنشئ جدولًا يُسمى
attemptsويحتوي على محاولات كلمات المرور التالية بالترتيب:"password""123456""admin""secure123"
- أنشئ متغيرًا يُسمى
indexواضبطه على1. ستستخدمه لتتبع المحاولة التي أنت عندها حاليًا. - استخدم حلقة
repeat-untilمن أجل:- إسناد المحاولة الحالية إلى
passwordباستخدامattempts[index]. يقرأ هذا العنصر الموجود في الموضعindexمن الجدول - اطبع
passwordالحالية - زِد
indexبمقدار 1 (مثلًاindex = index + 1) للانتقال إلى المحاولة التالية
- إسناد المحاولة الحالية إلى
- يجب أن تتوقف الحلقة فقط عندما تساوي
passwordقيمةcorrectPassword.
في كل مرة تُنفَّذ فيها الحلقة، تقرأ محاولة واحدة من الجدول، وتطبعها، ثم تنتقل إلى المحاولة التالية. تستمر الحلقة حتى يتم العثور على كلمة المرور الصحيحة.
جرّب بنفسك
-- تهيئة المتغيرات
local password = ""
local correctPassword = "secure123"
-- قائمة محاولات كلمة المرور
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- استخدم حلقة repeat-until لـ:
-- 1. عيّن المحاولة الحالية إلى النص الدقيق من التعليمات
-- 2. اطبع كلمة المرور التي تمت محاولتها
-- 3. انتقل إلى المحاولة التالية
-- توقف عندما تتطابق password مع correctPasswordيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات 2: العمليات العلائقية والمنطقية
معاملات التساويالمعاملات العلائقيةالمعامل 'and'المعامل 'or'المعامل 'not'التقييم قصير الدائرةقيم Truthy و Falsyمراجعة - المنطق البسيط10الجداول الجزء 1: نمط القائمة
ما هو الجدول؟إنشاء جدولالوصول إلى العناصر عبر الفهرستعديل العناصر عبر الفهرسمعامل الطول '#'table.insert()table.remove()ملخص - إدارة أعضاء الفريق13مشروع: متجر جرعات بسيط
إعداد المشروعإضافة جرعة2المتغيرات وأنواع البيانات
ما هو المتغير؟الأرقامالسلاسل النصيةالقيم المنطقيةالقيمة 'nil'الدالة type()قواعد التسميةمراجعة - ملف الشخصية5الإخراج الأساسي
طباعة القيم الحرفيةطباعة المتغيراتطباعة قيم متعددةدمج النصوص والمتغيراتدالة tostring()الإدخال (Input)التحويل (Cast)مراجعة - تقرير الحالةمراجعة - حتى 1208أساسيات معالجة النصوص
string.len()string.upper و string.lowerstring.sub()string.rep()string.find()مراجعة - تنسيق اسم المستخدم3المعاملات 1: العمليات الحسابية والدمج
المعاملات الحسابيةمعامل باقي القسمةمعامل الأسدمج النصوصأولوية المعاملاتملخص - حسابات بسيطة6مشروع: عرض إحصائيات الشخصية
رسالة ترحيبتعريف إحصائيات الشخصية9أساسيات الدوال
تعريف دالةاستدعاء دالةدوال مع معاملاتدوال بمعاملات متعددةجملة 'return'مراجعة - حاسبة المساحة12أساسيات الحلقات التكرارية
حلقة whileحلقة repeat-untilحلقة for الرقميةحلقة for مع خطوةجملة 'break'مراجعة - العد التنازليتدرّب بنفسك: مترجم Lua عبر الإنترنت