البرمجة

استخدام Map و Set في جافاسكربت

النوع Map (الخرائط) والنوع Set (الأطقم) في جافاسكربت

تعتبر جافاسكربت من أشهر لغات البرمجة المستخدمة في تطوير الويب، وواحدة من أبرز مزاياها هي قدرتها على التعامل مع الهياكل البيانية المختلفة، مثل الكائنات (Objects) والمصفوفات (Arrays). ولكن إلى جانب هذه الهياكل التقليدية، توفر جافاسكربت أيضًا نوعين آخرين من الهياكل البيانية الأكثر تقدمًا: النوع Map (الخرائط) والنوع Set (الأطقم). يتميز هذان النوعان بخصائص ووظائف مميزة تجعل استخدامهما في البرمجة أكثر مرونة وكفاءة في بعض الحالات مقارنة بالأنواع التقليدية.

أولاً: النوع Map (الخرائط)

النوع Map في جافاسكربت هو نوع من البيانات يُستخدم لتخزين أزواج من القيم المفتاحية (key-value pairs)، حيث يمكن أن يكون المفتاح أي نوع من أنواع البيانات، سواء كان نصًا، أو رقمًا، أو حتى كائنًا. على عكس الكائنات التقليدية (Objects) في جافاسكربت التي تقيد مفاتيحها بأن تكون من النوع String أو Symbol، فإن Map يسمح بتخزين أي نوع من البيانات كمفتاح.

خصائص النوع Map

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

  2. الأنواع المتنوعة للمفاتيح: يمكن أن تحتوي المفاتيح في Map على أي نوع من أنواع البيانات، سواء كانت أرقامًا، نصوصًا، كائنات، أو حتى وظائف.

  3. الحجم (Size): يوفر Map خاصية size التي تسمح بمعرفة عدد الأزواج الموجودة في الخريطة. وهو ما يعد أكثر سلاسة مقارنة بالكائنات، التي يجب تحديد عدد المفاتيح فيها يدوياً.

  4. العمليات على الـ Map:

    • إضافة عناصر: يمكن إضافة عناصر باستخدام الدالة set(key, value):

      javascript
      let map = new Map(); map.set('name', 'Ali'); map.set(1, 'First'); map.set(true, 'Boolean');
    • الحصول على قيمة: للوصول إلى قيمة معينة عبر المفتاح، نستخدم الدالة get(key):

      javascript
      console.log(map.get('name')); // "Ali"
    • التحقق من وجود مفتاح: يمكن التحقق من وجود مفتاح معين في الخريطة باستخدام has(key):

      javascript
      console.log(map.has(1)); // true console.log(map.has('age')); // false
    • حذف عنصر: يمكن حذف عنصر عبر المفتاح باستخدام delete(key):

      javascript
      map.delete('name'); console.log(map.has('name')); // false
    • مسح كافة العناصر: باستخدام clear():

      javascript
      map.clear(); console.log(map.size); // 0

استخدامات النوع Map

  1. تخزين أزواج من القيم المفتاحية: يستخدم Map في حالات تحتاج فيها إلى تخزين بيانات مع مفاتيح مخصصة يمكن أن تكون من أي نوع.

  2. استرجاع البيانات بسرعة: عند العمل مع مجموعات كبيرة من البيانات حيث تحتاج إلى الوصول إلى قيمة معينة عبر مفتاح، يمكن لـ Map أن يوفر وقت وصول أسرع مقارنة بالكائنات التقليدية، خاصة عند التعامل مع مفاتيح غير نصية.

  3. الاحتفاظ بالترتيب: عندما تحتاج إلى الحفاظ على ترتيب العناصر، سواء عند إضافة أو عند استرجاع القيم، يكون Map الخيار المثالي.


ثانياً: النوع Set (الأطقم)

أما النوع Set في جافاسكربت فهو نوع آخر مميز لتخزين القيم الفريدة (Unique Values). بعبارة أخرى، يضمن Set عدم وجود قيم مكررة ضمن المجموعة. يعتبر Set مثاليًا في الحالات التي تحتاج فيها إلى تخزين مجموعة من القيم دون الحاجة إلى القلق بشأن التكرار.

خصائص النوع Set

  1. القيم الفريدة: لا يمكن أن يحتوي Set على قيم مكررة. إذا حاولت إضافة نفس القيمة أكثر من مرة، فلن يتم إضافتها مرة أخرى.

  2. الترتيب: كما هو الحال مع Map، يحتفظ Set أيضًا بالترتيب الذي تتم فيه إضافة العناصر. لذلك يمكن استرجاع القيم بنفس الترتيب الذي تمت إضافتها به.

  3. العمليات على الـ Set:

    • إضافة قيم: لإضافة قيمة إلى Set، يمكن استخدام add(value):

      javascript
      let set = new Set(); set.add(1); set.add(2); set.add(3); set.add(1); // لن تتم إضافة 1 مرة أخرى console.log(set); // Set {1, 2, 3}
    • التحقق من وجود قيمة: باستخدام has(value):

      javascript
      console.log(set.has(2)); // true console.log(set.has(4)); // false
    • حذف قيمة: باستخدام delete(value):

      javascript
      set.delete(2); console.log(set.has(2)); // false
    • مسح كافة القيم: باستخدام clear():

      javascript
      set.clear(); console.log(set.size); // 0

استخدامات النوع Set

  1. التأكد من القيم الفريدة: يستخدم Set بشكل رئيسي لضمان عدم تكرار القيم في مجموعة معينة. على سبيل المثال، عند التعامل مع قائمة من العناصر التي يجب أن تكون فريدة مثل عناوين البريد الإلكتروني أو أسماء المستخدمين.

  2. العمليات على المجموعات: يوفر Set طريقة مرنة للتعامل مع المجموعات، مثل دمج المجموعات أو إزالة القيم المكررة.

  3. التحقق من العضوية: عندما تحتاج إلى معرفة إذا كانت قيمة معينة موجودة في المجموعة أو لا.


الفرق بين Map و Set

رغم أن كلا من Map و Set يتعاملان مع المجموعات من حيث تخزين البيانات، إلا أنهما يختلفان في عدة جوانب رئيسية:

  • الهيكل:

    • Map يُستخدم لتخزين أزواج من القيم المفتاحية (key-value pairs).

    • Set يُستخدم لتخزين القيم الفريدة فقط.

  • التكرار:

    • في Map يمكن أن تحتوي كل قيمة على مفتاح فريد، بينما في Set يمكن أن تحتوي فقط على قيم فريدة.

  • الوصول:

    • في Map يتم الوصول إلى القيم عبر المفاتيح، بينما في Set يتم الوصول إلى القيم مباشرة.

  • التخزين:

    • يتيح Map تخزين البيانات في شكل أزواج (مفتاح-قيمة)، بينما يتيح Set تخزين القيم فقط دون الحاجة إلى مفتاح.


الحالات التي يمكن استخدام Map و Set فيها

  • عند التعامل مع بيانات غير مرتبة: في حالة كانت البيانات التي تتعامل معها تحتاج إلى ترتيب عند إضافة واسترجاع القيم، فإن Map و Set يوفران حلاً مناسبًا.

  • البيانات الفريدة: في حالة كانت الحاجة لتخزين بيانات فريدة فقط دون تكرار، مثل قائمة من القيم أو المعرفات، يكون Set الخيار الأمثل.

  • البيانات مع مفاتيح مخصصة: إذا كنت بحاجة إلى تخزين معلومات مرتبطة بمفاتيح مخصصة (مثل الكائنات أو الأرقام)، فإن Map يقدم لك مزايا كبيرة مقارنة بالكائنات التقليدية.


خاتمة

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