يعد النوع الذي تم تعداده في TypeScript طريقة سهلة لتجميع القيم ذات الصلة ، مع معنى واضح.

التعداد ، أو النوع الذي تم تعداده ، هو بنية بيانات تسمح لك بتعريف مجموعة من القيم المسماة.

توفر Enums طريقة لتمثيل مجموعة ثابتة من القيم كثوابت. يمكن أن تساعد في جعل التعليمات البرمجية الخاصة بك أكثر تعبيرًا وتوثيقًا ذاتيًا من خلال إعطاء أسماء ذات معنى لقيم محددة. هنا سوف تتعلم كيف يمكنك استخدام التعدادات في TypeScript.

إنشاء التعداد

تمثل Enums بشكل عام عددًا ثابتًا من الخيارات لقيمة معينة. على سبيل المثال ، قد يكون للتعداد الذي يمثل الألوان الأساسية قيم ثابتة للأحمر والأصفر والأزرق.

تمثل Enums البيانات كمجموعة من أزواج المفتاح / القيمة المعروفة باسم أعضاء التعداد. يجب أن يكون المفتاح دائمًا عبارة عن سلسلة. ومع ذلك ، يمكن أن تكون القيمة - رقم يتزايد تلقائيًا بشكل افتراضي - رقمية أو سلسلة أو محسوبة.

يمكنك إنشاء تعداد في لغة TypeScript باستخدام تعداد كلمة رئيسية. اتبعه باسم التعداد وزوج من الأقواس المتعرجة ({}) التي تحتوي على أعضاء التعداد. اصطلاح تسمية JavaScript شائع تنص على أن أسماء التعداد يجب أن تبدأ بحرف كبير.

instagram viewer
تعداد اتجاه {
أعلى،
تحت،
غادر،
يمين
}

هذا المثال يحتوي على تعداد يسمى اتجاه. يحتوي التعداد على عضو يمثل كل اتجاه: أعلى ، أسفل ، يسار ، ويمين.

نظرًا لأن هذا الرمز لا يحدد قيمة لكل مفتاح ، فإن TypeScript سيعين القيم تلقائيًا. العضو الأول ، Up ، ستكون قيمته 0. سيكون لكل عضو متبقٍ قيمة 1 أكبر من قيمة العضو السابق. يمكنك إعلان ذلك صراحة إذا وجدت صعوبة في تذكر:

تعداد اتجاه {
لأعلى = 0,
أسفل = 1,
اليسار = 2,
حق = 3,
}

أو يمكنك التصريح عن قيم مختلفة بشكل صريح ، مع ترك القيم غير المعلنة لتستمر في الزيادة كما كان من قبل:

تعداد حالة {
نشط = 9,
غير نشط، // 10
}

في هذا المثال ، قيمة العضو غير النشط هي 10. ينطبق هذا السلوك على التعدادات التي تحتوي على قيم رقمية فقط ، وليس تلك التي تحتوي على سلسلة أو أعضاء غير متجانسين.

أنواع التعداد المختلفة

تحتوي Enums في TypeScript على نوع ضمني يعتمد على نوع القيم التي يحملها أعضاؤها. النوع الأكثر شيوعًا هو التعداد الرقمي ، الذي يغطي سلوكه القسم السابق ، ولكن هناك نوعان من الاختلافات.

أعداد السلاسل

تعداد السلسلة هو تعداد يكون فيه جميع أعضائه سلاسل. على عكس التعدادات الرقمية ، حيث يتم تعيين القيم تلقائيًا ، يجب عليك تهيئة كل عضو بسلسلة:

تعداد الألوان الأساسية {
أحمر = "أحمر",
أصفر = "أصفر",
أزرق = "أزرق"
}

على الرغم من أن تعدادات السلسلة لا تحتوي على خصائص زيادة تلقائية ، إلا أنها قد تكون أكثر منطقية إذا قمت بتسلسلها. يجب أن تظل قيمها وصفية ، بدون أسماء أعضاء ، بينما قد لا تكون مجموعة القيم الرقمية ذاتية الوصف.

أعداد غير متجانسة

التعدادات غير المتجانسة هي تعدادات تحتوي على أعضاء رقمية وسلسلة. على سبيل المثال:

تعداد نتيجة {
النجاح = "نجاح",
فشل = 0
}

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

تعداد الأعضاء المحسوب والثابت

كل عضو من أعضاء التعداد له قيمة ، والتي يمكن أن تكون إما ثابتة أو محسوبة.

أعضاء التعداد الثابت

يكون عضو التعداد ثابتًا إذا استوفى أيًا من الشروط أدناه.

  1. إنه العضو الأول في التعداد وليس له مُهيئ.
  2. لا يحتوي على مُهيئ ، وكان عضو التعداد السابق ثابتًا رقميًا.
  3. يتم تهيئته بتعبير تعداد ثابت.

وفقًا لوثائق TypeScript ، فإن تعبير التعداد الثابت هو مجموعة فرعية من تعبيرات TypeScript التي يمكن تقييمها بالكامل في وقت الترجمة. على سبيل المثال ، سلسلة أو حرفية رقمية.

على سبيل المثال ، أعضاء التعداد في كتلة التعليمات البرمجية أدناه كلها ثابتة:

// حالة 1
تعداد اتجاه {
أعلى،
تحت،
غادر،
يمين
}

// الحالة 2
تعداد يوم من أيام الأسبوع {
الاثنين = 1,
يوم الثلاثاء،
الأربعاء،
يوم الخميس،
جمعة
}

// الحالة 3
تعداد موسم {
الربيع = "ربيع",
الصيف = "صيف",
الخريف = "خريف",
الشتاء = "شتاء"
}

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

على سبيل المثال ، إليك النسخة المنقولة من تعداد الموسم:

فار موسم؛
(وظيفة (موسم) {
موسم["ربيع"] = "ربيع";
موسم["صيف"] = "صيف";
موسم["خريف"] = "خريف";
موسم["شتاء"] = "شتاء";
}) (الموسم || (الموسم = {})) ؛

أعضاء التعداد المحسوب

يمكنك استخدام أعضاء التعداد المحسوبين لتعيين قيم لأعضاء التعداد استنادًا إلى التعبيرات أو العمليات الحسابية الديناميكية الأخرى. على سبيل المثال:

تعداد مقاس {
صغير = 1,
متوسط ​​= احسب الحجم (12),
كبير = احسب الحجم (5)
}

وظيفةاحسب الحجم(قيمة: رقم): رقم{
يعود قيمة * 5;
}

وحدة التحكم.log (الحجم. كبير)

ال مقاس يتألف Enum من ثلاثة أعضاء: صغير, واسطة، و كبير. يقوم بتعيين القيمة 1 بشكل صريح للعضو الصغير. ال واسطة و كبير يستخدم الأعضاء وظيفة احسب الحجم لحساب قيمهم في وقت التشغيل.

عند العمل مع أعضاء التعداد المحسوبين ، من المهم ملاحظة أن القيم غير معروفة حتى وقت التشغيل. قد يؤدي هذا إلى مزيد من التعقيد والإمكانات أخطاء وقت التشغيل مقارنة بأعضاء التعداد مع القيم الثابتة.

على سبيل المثال:

فار مقاس؛
(وظيفة (مقاس) {
الحجم [الحجم ["صغير"] = 1] = "صغير";
الحجم [الحجم ["واسطة"] = احسب الحجم (12)] = "واسطة";
الحجم [الحجم ["كبير"] = احسب الحجم (5)] = "كبير";
}) (الحجم || (الحجم = {})) ؛

وحدة التحكم.سجل(مقاس.كبير)

كتلة التعليمات البرمجية أعلاه هي النسخة المنقولة من مقاس تعداد. لاحظ كيف أن TypeScript لا تتضمن قيم الإرجاع من calculateSize () في كود JavaScript. بدلاً من ذلك ، يتضمن استدعاء الوظيفة الأصلي بحيث يحدد JavaScript القيم في وقت التشغيل.

الوصول إلى قيم التعداد

يمكنك الوصول إلى قيم أعضاء التعداد باستخدام تدوين نقطة الكائن.

على سبيل المثال:

تعداد اتجاه {
لأعلى = 0,
أسفل = 1,
اليسار = 2,
حق = 3,
}

وحدة التحكم.log (اتجاه. غادر) // 2

عكس التعداد الرقمي

يشير التعيين العكسي في التعداد الرقمي إلى القدرة على جلب اسم عضو التعداد المقابل من قيمته. يمكن أن يكون هذا مفيدًا بشكل خاص عند التعامل مع القيم الرقمية ، والتي قد تحتاج إلى فك تشفيرها.

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

على سبيل المثال:

تعداد اتجاه {
لأعلى = 1,
تحت،
غادر،
يمين
}

وظيفةgetDirectionName(الاتجاهالقيمة: رقم): خيط{
// عكس الخرائط
مقدار ثابت directionName = الاتجاه [directionValue] ؛
يعود اسم الاتجاه ؛
}

وحدة التحكم.log (getDirectionName (1)); // "أعلى"
وحدة التحكم.log (getDirectionName (3)); // "غادر"

هذا getDirectionName تؤدي الدالة تعيينًا عكسيًا عن طريق الوصول إلى اسم عضو التعداد باستخدام قيمته كفهرس. تأخذ الوظيفة ملف اتجاه القيمة كوسيطة ويسترد اسم عضو التعداد المقابل باستخدام الاتجاه [directionValue].

يمكن أن يكون التعيين العكسي مفيدًا في السيناريوهات حيث يكون لديك قيمة رقمية وتحتاج إلى تحديد اسم عضو التعداد المقابل. يوفر طريقة ملائمة للعمل مع التعدادات في كلا الاتجاهين الأمامي والخلفي.

هناك العديد من تطبيقات Enums

يمكنك استخدام التعدادات في سيناريوهات مختلفة ، مثل معالجة عبارات التبديل ، وتحديد معلمات الوظيفة ، وتعيين البيانات ، وتمثيل الاختيارات أو الإعدادات.

سواء أكنت بحاجة إلى تمثيل مجموعة محدودة من الخيارات أو إدارة انتقالات الحالة المعقدة ، فإن التعدادات في TypeScript هي أداة قيمة لتحسين وضوح التعليمات البرمجية وبنيتها.