الدرس 5 من 8
خطأ الفرق بواحد
- 11 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
افحص الحدود قبل الوسط
الشرح
خطأ الفرق بواحد (off-by-one) أشهر أخطاء الحلقات، فتبدأ الحلقة بعد أول عنصر بخطوة، أو تتوقّف قبل آخره بخطوة، أو تتجاوزه بخطوة، والكود يبدو صحيحًا تمامًا حين تقرؤه.
والقاعدة التي تحلّ أغلبه أن مواضع عناصر المصفوفة تبدأ من 0 وتنتهي عند length - 1، أمّا list[list.length] فلا يرمي خطأً بل يُرجع undefined بصمت، ولهذا تظهر «undefined» في الصفحة دون أن يتوقّف شيء.
ولتكتشفه جرّب الحدود لا الوسط، أي جرّب قائمة فارغة، وقائمة فيها عنصر واحد، وأول عنصر وآخر عنصر، فهناك يختبئ هذا الخطأ دائمًا.
المطلوب
أصلح الحلقة في newestFirst(list) لتُرجع الرسائل كلّها من الأحدث إلى الأقدم، دون أي undefined، ودون أن تغيّر المصفوفة الأصلية.
الفحوص
6 فحوص- الحلقة لا تقرأ بعد آخر موضع
- أقدم عنصر لا يضيع
- القائمة ذات العنصر الواحد تبقى كما هي
- القائمة الفارغة تعطي قائمة فارغة
- المصفوفة الأصلية لا تتغيّر
- الصفحة تعرض الرسائل الأربع من الأحدث إلى الأقدم