0Pricing
TypeScript Academy · درس

العد باستخدام طول الصفيفة

مثّلوا الأرقام بأطوال الصفائف في الأنواع

العد باستخدام طول الصفيفة درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

الأعداد تحتاج إلى تمثيل

لا يستطيع نظام الأنواع جمع القيم العددية الحرفية مباشرةً. والحل التقليدي هو تمثيل العدد N على هيئة tuple يحتوي على N من العناصر. ولا تهم المحتويات؛ فالمهم هو الطول فقط.

type Three = [unknown, unknown, unknown];
type N = Three["length"]; // 3

قراءة الطول

يحتوي كل نوع tuple على خاصية length، وهي نوع حرفي رقمي. تؤدي الفهرسة باستخدام ["length"] إلى قراءتها مجددًا كرقم يمكنك استخدامه.

type A = [1, 2, 3, 4]["length"]; // 4
type B = []["length"];           // 0
type C = ["x"]["length"];        // 1

لماذا نستخدم unknown كنوع حشو

نستخدم unknown كنوع للعناصر لأن القيم غير مهمة، وإنما المهم هو العدد فقط. يمكن استخدام أي نوع، لكن unknown يوضح بجلاء أن العنصر «عنصر نائب».

type Two = [unknown, unknown];
type N = Two["length"]; // 2

بناء tuple بطول N

للسير في الاتجاه المعاكس، ابنِ tuple بالطول المطلوب باستخدام الاستدعاء الذاتي. أضف عناصر حتى يتطابق الطول مع N، ثم أعد الـtuple. هذا هو المساعد الشهير BuildTuple.

type BuildTuple<N extends number, Acc extends unknown[] = []> =
  Acc["length"] extends N ? Acc : BuildTuple<N, [...Acc, unknown]>;

type A = BuildTuple<3>; // [unknown, unknown, unknown]

كيف تعمل حلقة BuildTuple

تتبّع BuildTuple<3>:

  • طول Acc هو 0 وليس 3، فأضف عنصرًا
  • طول Acc هو 1 وليس 3، فأضف عنصرًا
  • طول Acc هو 2 وليس 3، فأضف عنصرًا
  • طول Acc هو 3، وهو يساوي 3، فأعد النتيجة

طول المُجمّع هو عدّاد الحلقة.

type A = BuildTuple<2>; // [unknown, unknown]

الطول هو الجسر

تتيح لك عمليتان الانتقال بين الأرقام وtuples:

  • من رقم إلى tuple: BuildTuple<N>
  • من tuple إلى رقم: T["length"]

تعتمد كل الحسابات على مستوى الأنواع على عبور هذا الجسر.

type FromN = BuildTuple<4>;        // tuple of length 4
type BackToN = FromN["length"];    // 4

المقارنة باستخدام الطول

بما أن طول الـtuple قيمة حرفية، يمكنك التحقق من تساوي الأعداد. ابنِ tuples وقارن أطوالها من خلال قابلية الإسناد.

type SameLength<A extends unknown[], B extends unknown[]> =
  A["length"] extends B["length"] ? true : false;

type X = SameLength<[1, 2], ["a", "b"]>;   // true
type Y = SameLength<[1], ["a", "b"]>;      // false

عداد طول عام

يمكنك إعادة تنفيذ length باستخدام الاستدعاء الذاتي لفهم آلية عمله، مع أن قراءة ["length"] أسرع. يوضح ذلك أن العد ليس سوى المرور على tuple.

type Len<T extends unknown[], Acc extends unknown[] = []> =
  T extends [unknown, ...infer R]
    ? Len<R, [...Acc, unknown]>
    : Acc["length"];

type A = Len<["a", "b", "c"]>; // 3

استخدام tuples كعدادات

فكّر في الـtuple على أنه سجلّ عدّ: كل عنصر يمثل علامة واحدة. تؤدي إضافة عنصر إلى زيادة العداد، وإزالة عنصر إلى إنقاصه. يجعل هذا النموذج الذهني الحسابات بديهية.

type Inc<N extends number> = [...BuildTuple<N>, unknown]["length"];

type A = Inc<3>; // 4

لمحة عن الإنقاص

يبني الإنقاص الـtuple للقيمة N، ثم يستنتج كل شيء باستثناء العنصر الأخير ويقرأ الطول الأقصر. ستضفي على ذلك صياغة رسمية في الدرس التالي.

type Dec<N extends number> =
  BuildTuple<N> extends [unknown, ...infer R] ? R["length"] : 0;

type A = Dec<3>; // 2
type B = Dec<0>; // 0

حدود يجب تذكّرها

تعمل هذه التقنية مع الأعداد الصحيحة الصغيرة غير السالبة. تؤدي قيم N الكبيرة جدًا إلى بلوغ حدود الاستدعاء الذاتي، ولا توجد أداة مضمّنة للتعامل مع الأعداد السالبة أو العشرية. وضمن هذه الحدود، تكون التقنية موثوقة وثابتة بالكامل.

type A = BuildTuple<5>["length"]; // 5 (fine)
// BuildTuple<10000> would error: too deep

تحقق سريع

اختبر مدى فهمك للعد باستخدام طول الـtuple.

مراجعة

العد هو أساس الرياضيات على مستوى الأنواع.

  • مثّل N باستخدام tuple طوله N.
  • اقرأ الرقم باستخدام T["length"].
  • ينتقل BuildTuple<N> من الرقم إلى الـtuple.
  • يعمل مع الأعداد الصحيحة الصغيرة غير السالبة فقط.

التالي: الجمع والطرح الفعليان.

الأسئلة الشائعة

هل درس «العد باستخدام طول الصفيفة» مجاني؟

نعم — نص درس «العد باستخدام طول الصفيفة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «العد باستخدام طول الصفيفة»؟

مثّلوا الأرقام بأطوال الصفائف في الأنواع تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «العد باستخدام طول الصفيفة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. العد باستخدام طول الصفيفة
  2. الجمع والطرح على مستوى النوع
  3. المقارنات على مستوى النوع
  4. أدوات الأنواع الرقمية العملية
← العودة إلى TypeScript Academy