الدرس 8 من 10
المصفوفات والصفوف
- 12 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
طول ثابت والمصفوفة الأصلية لا تتغيّر
الشرح
النوع number[] مصفوفة أرقام بأيّ طول، أمّا الصفّ (tuple) مثل [string, number] فطوله ثابت ولكل موضع فيه نوعه، فالعنصر الأول نصّ والثاني رقم.
ولا يستنتج المترجم الصفوف وحده، فنوع [["ليان", 82]] يُستنتج على أنه (string | number)[][]، فيضيع الفرق بين الاسم والنتيجة.
والنوع readonly Entry[] مصفوفة للقراءة فقط، فليس فيها push ولا sort ولا أيّ دالة تغيّر المصفوفة نفسها، فاستعمله لمُعاملات الدوال التي لا يحقّ لها أن تغيّر ما يصلها.
وهذا يكشف خطأً شائعًا، فـsort ترتّب المصفوفة الأصلية ثم تُرجعها نفسها، فيتغيّر ترتيب بيانات من استدعى دالتك دون أن يطلب ذلك، والحلّ أن تنسخها أولًا: [...entries].sort(...).
المطلوب
عرّف type Entry = [string, number] واجعله نوع عناصر board، واجعل مُعامل ranked من نوع readonly Entry[]، بحيث تُرجع نسخة مرتّبة تنازليًّا بالنتيجة ولا تغيّر المصفوفة الأصلية.
الفحوص
6 فحوص- لا توجد أخطاء في الأنواع
- النوع Entry صفّ (tuple) فيه نصّ ثم رقم
- الترتيب المعكوس في Entry خطأ
- المترجم يعرف أنواع عناصر board
- الدالة ranked تقبل مصفوفة للقراءة فقط
- الدالة ranked ترتّب نسخة ولا تغيّر الأصل