حلقة repeat-until
جزء من قسم الأساسيات في رحلة Lua على Coddy. الدرس 72 من 90.
تقدم Lua نوعًا آخر من الحلقات التكرارية يُسمى حلقة repeat-until، والذي يتميز بخاصية فريدة تميزه عن حلقة while التي تعلمتها للتو. الفرق الرئيسي هو أن حلقة repeat-until تُنفذ دائمًا كتلة البرمجية الخاصة بها مرة واحدة على الأقل، بغض النظر عن الـ condition.
يبدو أسلوب الكتابة (syntax) كالتالي:
repeat
-- الكود للتكرار
until conditionلاحظ أن الـ condition يتم التحقق منه في النهاية، بعد تشغيل الكود مرة واحدة بالفعل. يستمر الـ loop في التكرار until يصبح الـ condition يساوي true - وهو عكس while loop الذي يستمر طالما كان الـ 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!")تضمن هذه الحلقة أنك ستلقي النرد مرة واحدة على الأقل، وتستمر في الإلقاء حتى يصبح الشرط roll == 6 صحيحًا (true). هذا السلوك الذي يقوم على "التنفيذ أولاً، ثم التحقق لاحقًا" يجعل حلقات 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 عبر الإنترنت