البرمجة

فهم الكائنات المكرَّرة في جافاسكربت

الكائنات المكرَّرة (Iterables) في جافاسكربت: مفاهيم وأساليب

تعد جافاسكربت من أبرز لغات البرمجة التي يعتمد عليها المطورون لبناء تطبيقات الويب التفاعلية، ويعتبر فهم المفاهيم الأساسية في اللغة جزءًا لا يتجزأ من التطور المهني لأي مبرمج. من بين هذه المفاهيم، تأتي الكائنات المكرَّرة (Iterables) كأحد الأساسيات التي تسهم في تسهيل التعامل مع البيانات بشكل مرن وفعال. في هذا المقال، سنتناول مفهوم الكائنات المكرَّرة في جافاسكربت من جوانب متعددة، متطرقين إلى أنواعها، كيفية استخدامها، وكيفية تحسين أدائها في التطبيقات البرمجية.

تعريف الكائنات المكرَّرة في جافاسكربت

في جافاسكربت، الكائنات المكرَّرة (Iterables) هي كائنات يمكن التكرار عليها باستخدام حلقة تكرار مثل for...of. بعبارة أخرى، الكائن المكرَّر هو الكائن الذي يمكن التفاعل معه عبر سلاسل من القيم يتم استخراجها واحدة تلو الأخرى.

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

بروتوكول التكرار (Iterable Protocol)

لكي يُعتبر كائن ما مكرَّرًا في جافاسكربت، يجب أن يمتثل لبروتوكول التكرار، الذي يتطلب وجود وظيفة Symbol.iterator الخاصة به. هذه الدالة هي التي تُستخدم لإرجاع مكرر (Iterator) يقوم بتوليد العناصر بشكل متسلسل.

في جافاسكربت، يكون الكائن المكرَّر هو كائن يحتوي على خاصية Symbol.iterator، وهي دالة تعيد مكررًا يحتوي على دالة next التي تستخرج العناصر، وتُرجع كائنًا يحتوي على خاصيتين:

  1. value: القيمة الحالية التي يتم استخراجها.

  2. done: قيمة منطقية (boolean) تحدد ما إذا كانت عملية التكرار قد انتهت أم لا.

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

أنواع الكائنات المكرَّرة في جافاسكربت

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

  1. المصفوفات (Arrays):
    المصفوفات هي من أكثر الهياكل البيانات استخدامًا في جافاسكربت. كونها تدعم التكرار، يمكننا استخدام حلقة for...of لاستعراض عناصرها بسهولة.

    مثال على ذلك:

    javascript
    const arr = [1, 2, 3, 4, 5]; for (const value of arr) { console.log(value); // سيطبع القيم 1, 2, 3, 4, 5 }
  2. السلاسل النصية (Strings):
    السلاسل النصية في جافاسكربت تعتبر أيضًا كائنات مكرَّرة. عند التكرار عبرها، يمكن الحصول على كل حرف بشكل متسلسل.

    مثال:

    javascript
    const str = "Hello"; for (const char of str) { console.log(char); // سيطبع H, e, l, l, o }
  3. المجموعات (Sets):
    الـ Set هو نوع آخر من الكائنات المكرَّرة في جافاسكربت، وهو يمثل مجموعة من القيم الفريدة. يمكن التكرار عبره بنفس الطريقة كما في المصفوفات.

    مثال:

    javascript
    const set = new Set([1, 2, 3, 4]); for (const value of set) { console.log(value); // سيطبع القيم 1, 2, 3, 4 }
  4. المؤشرات (Maps):
    الـ Map أيضًا كائن مكرَّر يمكن التكرار عبره. وهو نوع خاص من الكائنات التي تخزن أزواجًا من القيم (مفتاح – قيمة).

    مثال:

    javascript
    const map = new Map([ ['a', 1], ['b', 2], ['c', 3] ]); for (const [key, value] of map) { console.log(key, value); // سيطبع كل زوج من المفتاح والقيمة }
  5. المجموعات الضعيفة (WeakSets و WeakMaps):
    بينما تعتبر هذه الأنواع أكثر تعقيدًا، إلا أنها أيضًا تدعم التكرار بطرق مشابهة للـ Set و Map، إلا أنها لا تحتفظ بالإشارات الضعيفة للكائنات مما يعني أنها لا تمنع جمع القمامة (Garbage Collection).

كيفية استخدام الكائنات المكرَّرة (Iterables)

إن استخدام الكائنات المكرَّرة في جافاسكربت يتطلب فهمًا واضحًا لبروتوكول التكرار وطريقة التعامل مع المكررات (Iterators). يمكن استخدام العديد من الطرق للعمل مع الكائنات المكرَّرة، ومنها:

  1. استخدام حلقة for...of:
    تعتبر هذه الطريقة الأكثر شيوعًا لتكرار العناصر في الكائنات المكرَّرة. حيث يتم استخراج العناصر من الكائن بسهولة باستخدام هذه الحلقة.

    مثال:

    javascript
    const arr = [10, 20, 30]; for (const num of arr) { console.log(num); // 10, 20, 30 }
  2. استخدام الدالة Array.from():
    يمكن تحويل أي كائن مكرَّر إلى مصفوفة باستخدام Array.from()، مما يسهل التعامل مع العناصر واستخدام الوظائف المصفوفية المتنوعة.

    مثال:

    javascript
    const set = new Set([1, 2, 3]); const arrFromSet = Array.from(set); console.log(arrFromSet); // [1, 2, 3]
  3. استخدام forEach():
    تتيح هذه الطريقة التكرار عبر الكائنات المكرَّرة وتطبيق دالة معينة على كل عنصر. لكن، في حالة Set و Map، يختلف التكرار قليلًا حيث يتم إرجاع كل زوج من القيم (في حالة الـ Map) أو كل قيمة (في حالة الـ Set).

    مثال:

    javascript
    const arr = [1, 2, 3]; arr.forEach((num) => { console.log(num); // 1, 2, 3 });
  4. استخدام المكررات (Iterators):
    يمكن الحصول على مكرر لأي كائن مكرَّر باستخدام Symbol.iterator. بعد ذلك، يمكن استدعاء دالة next لاستخراج القيم واحدة تلو الأخرى. هذه الطريقة تُستخدم عندما نحتاج إلى مرونة أكبر في التعامل مع التكرار.

    مثال:

    javascript
    const arr = [1, 2, 3]; const iterator = arr[Symbol.iterator](); console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: 3, done: false } console.log(iterator.next()); // { value: undefined, done: true }

الكائنات غير المكرَّرة

بينما تدعم العديد من الكائنات في جافاسكربت بروتوكول التكرار، إلا أن هناك كائنات أخرى لا تدعمه بشكل افتراضي، مثل كائنات Object. ومع ذلك، يمكن تحويل كائنات Object إلى كائنات مكرَّرة باستخدام بعض الأساليب مثل Object.keys() أو Object.values() أو Object.entries(). بهذه الطريقة، يمكننا استعراض خصائص الكائنات.

مثال على ذلك:

javascript
const obj = { a: 1, b: 2, c: 3 }; const keys = Object.keys(obj); // ["a", "b", "c"] for (const key of keys) { console.log(key); // a, b, c }

الخاتمة

إن فهم الكائنات المكرَّرة في جافاسكربت يُعد جزءًا أساسيًا من تطوير التطبيقات التي تتعامل مع البيانات بشكل ديناميكي. سواء كنت تعمل مع المصفوفات أو المجموعات أو حتى الكائنات Map و Set, فإن الكائنات المكرَّرة تقدم طريقة مرنة وبسيطة للتكرار عبر البيانات. من خلال الاستفادة من بروتوكول الت