التطوير / ROBLOX
شروط Luau: ترتيب if وelseif عند حدود التقدم
اختر حالة واضحة من عدد المراحل المكتملة. افحص أولوية الفروع والحدود والفرق بين if المستقلة وسلسلة elseif ببيانات تعليمية أصلية.
حدّد الحالات أولاً #
تحدٍّ خيالي فيه عشر مراحل. نستخدم new عند صفر وstarted من واحد وhalfway من خمسة وcomplete من عشرة. هذه معرفات أصلية للتعليم. تصنيف عدد لا يثبت اجتيازاً فعلياً ولا يمنح شارة ولا يحفظ تقدماً.
دوّن الحدود قبل الشيفرة. عند خمسة يصح شرطان: واحد على الأقل وخمسة على الأقل. حدّد الحالة ذات الأولوية. تحتاج التسمية الواحدة إلى اختيار واحد بدلاً من رسائل متنافسة. يحدد الاتفاق ترتيب الفحوص وما يتوقعه المستدعي.
افحص الحد الأعلى أولاً #
تفحص classifyProgress عشرة ثم خمسة ثم واحد. تنفّذ سلسلة if وelseif وelse أول فرع مناسب. يطابق سبعة حد خمسة ويعيد halfway دون متابعة الحد الأصغر. لا يطابق الصفر أياً منها فيدخل else.
شغّل المثال منفصلاً وقارن new وstarted وhalfway وcomplete للمدخلات 0 و1 و5 و10. الأعداد صغيرة ومعلومة. نُفّذت الأمثلة فعلاً بمفسّر Luau مستقل؛ هذا يختبر اللغة وليس حساب لاعب Roblox أو نظام تقدم كامل.
local function classifyProgress(count)
if count >= 10 then
return "complete"
elseif count >= 5 then
return "halfway"
elseif count >= 1 then
return "started"
else
return "new"
end
end
for _, count in {0, 1, 5, 10} do
print(classifyProgress(count))
endاكتشف الأولوية المعكوسة #
وضع count >= 1 أولاً يجعل عشرة تختار started. لا تُنفّذ الفروع التالية رغم صحة شرط الاكتمال أيضاً. الخطأ في الأولوية لا في العدد أو >=. يستولي الشرط الواسع المبكر على مدخلات الشرط الأدق اللاحق.
سجّل المدخل وكل الشروط الصحيحة وأول فرع مختار. تبديل كلمة started إلى complete يجعل مرحلة واحدة اكتمالاً كذلك. أصلح الترتيب أو الاتفاق. تساعد المجالات غير المتداخلة عندما لا يمكن ترتيب الشروط حسب الدقة.
قارن if المستقلة #
يستخدم المثال الثاني count=7 وفحصي if منفصلين. كلاهما صحيح فيطبع started وhalfway. تطبع سلسلة elseif اللاحقة halfway فقط للمدخل نفسه. الفحوص المستقلة تعمل منفصلة والسلسلة تختار فرعاً واحداً.
تصلح الفحوص المستقلة لأفعال متوافقة متعددة. تحتاج تسمية واحدة عادةً إلى اختيار حصري. توقّع عدد الرسائل ثم قارنه بالفعل. ليست عدة if خطأ دائماً؛ تصبح كذلك حين تخالف المطلوب من المهمة.
local count = 7
if count >= 1 then
print("started")
end
if count >= 5 then
print("halfway")
end
if count >= 5 then
print("halfway")
elseif count >= 1 then
print("started")
endافصل الصدق عن المقارنة #
الصفر والنص الفارغ صادقان في Luau، بينما false وnil كاذبان. لذلك لا يفحص if count then بلوغ المرحلة الأولى. يحتاج التمرين إلى حد عددي صريح مثل count >= 1.
افحص المدخلات الحقيقية منفصلاً: أعداد صحيحة محدودة ضمن المجال المتفق عليه. تستخدم الأمثلة قيماً تعليمية معلومة ولا تتحقق من تقدم العميل. لا تعتبر nil أو نصاً لاعباً جديداً بصمت ثم تعتمد التصنيف لمنح مكافأة.
اختبر جانبي كل حد #
جهّز 0 و1 و4 و5 و9 و10. المتوقع new وstarted وstarted وhalfway وhalfway وcomplete. قارن صفراً وواحداً ثم العدد السابق لكل حد والحد نفسه. يكشف ذلك استخدام > بدلاً من >= بالخطأ.
يقارن ملف الفحص أيضاً الأولوية الصحيحة والمعكوسة عند عشرة ويعد رسائل الفروع المستقلة. يثبت هذا التمرين الأصلي. الحالات الجديدة تحتاج إلى تحديث المصفوفة؛ نجاح فحص سابق لا يثبت قواعد أضيفت دون اختبار.
افصل الحالة والعرض #
تعيد classifyProgress معرفاً تقنياً، وتختار التسمية المترجمة منفصلةً بواسطة المعرف. لا ينبغي للترجمة تغيير الحدود. حفظ القواعد في نص الزر وحده قد يجعل معنى الشيفرة مختلفاً عن التسمية.
دوّن المعرفات الأربعة ومعانيها للتسليم. تغيير تسمية لا ينفّذ فعل لعبة. إذا أثرت حالة مستقبلية في الصلاحيات، اختبر شروط الخادم منفصلة. ظهور complete لا يثبت مصدر العدد ولا يكفي لإذن مكافأة.
| الفحص | المتوقع |
|---|---|
| 0 | new |
| 4 | started |
| 5 | halfway |
| 10 | complete |
سلّم القواعد والفحوص معاً #
احفظ الأولوية والمدخلات المقبولة والمعرفات وقيم الاختبار حول الحدود. حدّد هل المطلوب حالة واحدة أم أفعال مستقلة، ليتمكن المطور التالي من فهم أثر تغيير الترتيب.
أضف الحد الجديد إلى المصفوفة قبل الشيفرة وافحص الجيران والحالات السابقة. يبقى المثال حساب Luau خالصاً دون كائنات Roblox أو شبكة أو تخزين أو اجتياز فعلي. النتيجة اتفاق قابل للتحقق لاختيار حالة واحدة.
| الحقل | ما يُسجّل |
|---|---|
| المدخل | عدد مراحل معلوم |
| الأولوية | الحد الأعلى أولاً |
| النتيجة | معرف حالة واحد |
| الفحوص | جانبا الحدود |