ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

حين تتعامل مع لغة برمجية معينة و تجد تقنية محددة تفي بالغرض دائما، فأنت ترفض الإستغناء عنها، بل حتى انك لا تتقبل إستخدام او وجود تقنيات شبيهة لها قد تكون أفضل او أسوأ أحيانا، أفضل مثال على ذلك هو الـ Arrays فهي الأكثر إستخداما تقريبا في مجموعة من اللغات البرمجية، إن اردت تخزين مجموعة من البيانات و المعطيات في Object محدد فإستخدم الـ Arrays ( المصفوفات ) و رغم وجود نمطين آخرين يسمحان لك بفعل نفس الشيئ و هما الـ Sets و الـ Maps، فإنك ترفض فكرة التخلي عن الـ Arrays و إستخدامهما، و هذا عائد لسبب وجيه و ليس إعتباطي .

إننا نكره الأشياء التي لا نفهمها و لا نستوعبها، إن نجد ان الـ Arrays تفي بالغرض فلا داعي لفهم و إستعاب الـ Maps او الـ Sets لأنها شبيهة بها و ربما قد لا تقوم بالأمر بنفس الطريقة لكنها كفيلة بإنجاز المهمة، لكن ما لا قد تعرفه انه لا يمكنك إستخدام الـ Arrays في كل الحالات، بل لأكون أكثر صراحة معك الشيئ الذي جعلني أوفر لك هذا المقال انه قبلا كنت في صدد تطوير كود برمجي فإحتجت الى شيئ شبيه بالـ array لكنه يقوم بعمل مختلف، فقادني البحث الى الـ Sets و الـ Maps لأتذكر انني لم أستخدم هذين التقنيتين سوى مرة او مرتين طيلة مسيرتي، لأتذكر انه علي ان اخلد هذا الثلاثي في مقال يشرح كل واحدة منهما، فهلا بدأنا ؟

ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

- كل شيئ عن الـ Arrays :

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


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

ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

- كل شيئ عن الـ Sets :

الـ Set توفر لنا تماما ما ينقص الـ Array، عامل التفرد (Uniqueness) و عامل السرعة، في الـ Set لا يمكنك إضافة قيمة أزيد من مرتين، مثالية جدا لتصفية مجموعة من البيانات و إستخراجها بنمط الـ Distinct دون تكرار، ستفيدك كثيرا في حالة كنت تجلب بيانات عديدة سواء من قواعد بيانات او بإستخدام API مع الحفاظ على عامل التفرد.

إلى جانب التفرد، فالـ Sets لها عدة خواص مثل التحقق من وجود عنصر معين ضمن الـ Set و بما أنها لا تقبل سوى نسخة واحدة فإن الإجابة دائما تعود بـ True او False، أيضا سريعة في البحث و التنقيب عن المعلومات ( في هيكلة البيانات، نسبة التعقيد  (Complexity) الخاصة بالـ Array أكبر من الـ Set، أيضا لا تحتاج الى المرور على كل عناصر الـ Set من أجل إظهار العناصر كما في الـ Arrays بل المناداة على إسم الـ Set سيقوم بإظهار كل المعطيات.

ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

يوجد الكثير من الخصائص في الـ Set التي لم نذكرها في الكود أعلاه كالمناداة على عناصر الـ Set من خلال الـ Key او ترتيبه بدل المناداة عليه من خلال الـ Value، الجميل في الـ Set كذلك أنه يمكنك ان تضيف Set داخل Set آخر او ما يسمى بالـ Weaksets، قد يصبح الأمر أكثر تعقيدا في هذه الحالة، لذلك قد تود الإطلاع على تقنية أخرى لتحقيق الامر من خلالها ( مثل الـ Json مثلا ).

- كل شيئ عن الـ Maps :

الـ Map ذات إستخدام أكثر تشعباً و أكثر إحترافية، في كل من الـ Array و الـ Set نقوم بتخزين قيم أحادية بحيث تأخذ كل قيمة مفتاح (Key) الترتيب الخاص بها، في الأمثلة أعلاه نجد مثلا ان خيار فيسبوك يأتي في الترتيب الأول، أي قيمته 0 ( لأن الـ Arrays, Sets و الـ Maps تبدأ من الصفر ) لذلك إن اردنا قيمته عن طريق الـ Key سأقوم فقط بإستدعاء الـ item الموجود في الـ 0، لكن ماذا لو كان لدي 100 من هذه الـ items؟ كيف اتذكر مكان موقع " فيسبوك " ضمن قائمة هذه المواقع؟


نعم لقد حزرت الـ Map توفر لنا إمكانية تخزين مجموعة من المعطيات على طريقة Key -> Value، أي لكل قيمة مفتاح معين نقوم نحن بتحديده نستطيع من خلاله معرفة و إستخراج تلك القيمة مهما كان عدد القيم كثيرا بدل تذكر الرقم، في مثالنا جانبه قمنا بتخزين روابط مواقع التواصل الإجتماعي، لكن إن اردت إستدعاء أحدها اقوم فقط بكتابة إسم الـ Key الذي ادخلته و الذي هو إسم الموقع الإجتماعي، يمكن للـ Value التي تريد ان تقوم بتخزينها ان تكون بأي صيغة سواء رقم، نص او حتى Object بحد ذاته، و هذا ما يجعل الـ Maps دائعة الإستخدام.

ما الفرق بين الـ Sets، الـ Arrays و الـ Maps في الجافاسكربت

الميزة الأهم الأخرى في الـ Maps هي التحديث، في الـ Array ان اضفت قيمة موجودة مسبقا فإنه يقوم بإضافتها بشكل عادي، في الـ Set لا يقوم بإضافتها لأنها موجودة بالفعل، اما في الـ Maps فيقوم بتحديثها و يأخذ آخر تحديث ليقوم بتسجيله كـ Value.
سيفيدك هذا كثيراً حين يتعلق الأمر بجلب البيانات من قواعد البيانات مثلا، إذ يمكن تخزينها و الحفاظ على آخر تحديث لها في الـ Maps قبل ان تتم عملية الإرسال الى قواعد البيانات ليتم التعديل بشكل نهائي.


شاركه على :