حلقة 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 مثالية للحالات التي تحتاج فيها إلى حدوث شيء مرة واحدة على الأقل قبل أن تقرر ما إذا كنت ستتابع.
التحدي
سهلأنت تنشئ محاكاة بسيطة للتحقق من كلمة المرور.
- أنشئ متغيرًا باسم
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. إسناد المحاولة الحالية إلى password
-- 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 عبر الإنترنت