توفيق اسحيمة نشر 25 يناير 2022 أرسل تقرير نشر 25 يناير 2022 السلام عليكم هل من الممكن ان يتشرف احد الاخوة ويشرح لي الخاصية weakset بشكل مبسط وسهل الفهم وكدلك ما هو الفرق بينها وبين الخاصية weakMap جزاكم الله خيرا. 1 اقتباس
1 Adnane Kadri نشر 25 يناير 2022 أرسل تقرير نشر 25 يناير 2022 قبل محاولة فهم الأطقم والخرائط ضعيفة الإشارة weakSet و weakMap يجب أولا فهم ما هي الخرائط Maps والأطقم Sets من الأساس. لنقم بتناول كل منهما كالتالي: يمكن فهم الأطقم Sets على أنها تجميعات من القيم الفريدة من أي نوع بيانات (سلسلة نصية، مصفوفة .. الخ). بمعنى أن كل عنصر في هاته التجميعة لا يمكن أن يتكرر ضمن نفس المجموعة. إستعمالات شائعة: // إنشاء طقم const letters = new Set(["أ","ب","ت"]); // إضافة قيمة جديدة للطقم letters.add("ج"); // حذف قيمة من الطقم letters.delete("ج"); // التحقق ما كان الطقم يمتلك قيمة ما letters.has("ج"); // حذف كامل القيم من الطقم letters.clear(); يمكن فهم الخرائط Maps على أنها تجميعات من القيم معرفة في أزواج مفتاح-قيمة / key-value حيث يمكن أن تكون هاته المفاتيح أي نوع بيانات. // إنشاء خريطة const platforms = new Map([ ["Mostaql", 500], ["Hsoub.io", 300], ["Orange", 200] ]); // إضافة قيمة جديدة للخريطة platforms.set("Khamsat", 300); // جلب قيمة من الخريطة عن طريق مفتاحها platforms.get("Khamsat"); و الأطقم والخرائط ضعيفة الإشارة تختلف عنها من حيث أنها: تقبل تخزين كائنات فقط، لا يمكن تخزين أنواع أولية فيها. let visitedSet = new WeakSet(); let john = { name: "John" }; visitedSet.add(john); // مسموح visitedSet.add('5'); // غير مسموح تمتلك الأطقم والخرائط ضعيفة الإشارة توابع محدودة وأقل من الأطقم والخرائط العادية. توابع مثل keys أو values لن تكون متوفرة. ما الغرض وراء استعمالها؟ تستعمل أساسا لتخزين البيانات الإضافية المتعلقة بكائن ما. حيث يتم تعيين هذا الكائن كفمتاح لمجموعة البيانات الإضافية الخاصة به. وبالتالي، لو قمنا بمسح هذا الكائن من الذاكرة فستختفي هاته البيانات أيضا. ولنقل كمثال، يريد الطالب Jhon تخزين ملف سري يخصه، بشرط أن خروج هذا الطالب سيعني مسح هذا الملف السري. نقوم بذلك كالتالي: weakMap.set(john, "secret documents"); أي فقدان للكائن john في التطبيق، سيؤدي إلى مسح القيمة المسندة إليه كمفتاح في الخارطة ضعيفة الإشارة. يمكنك الإستزادة بالتعرف عليهما في النوع WeakMap والنوع WeakSet: الخرائط والأطقم ضعيفة الإشارة في جافاسكربت. 1 اقتباس
0 مسعود زاهي نشر 25 يناير 2022 أرسل تقرير نشر 25 يناير 2022 ال weakSet تسمح لك بتخزين objects في مجموعة، فهي تشبه ال Set يعني أن ما يوجد في المجموعة يكون فريداً من نوعه غير مكرر. الإختلاف الرئيسي بينها وبين ال Set هو أن WeakSet مجموعة من ال objects فقط. يعني انها لا يمكن أن تحتوي على قيمة من نوع بدائي. مثال على ذلك: const visitedSet = new WeakSet(); let john = { name: "John" }; let pete = { name: "Pete" }; visitedSet.add(john); // زارنا John visitedSet.add(pete); // وبعده Pete visitedSet.add("Mary"); // خطأ // ﻷن القيمة هنا من نوع بياني بدائي // الأنواع البيانية البدائية هي: //String, Number, BigInt, Boolean, Symbol أم بالنسبة لل WeakMap فهي مجموعة من الثنائيات كل ثنائية تضم مفتاحاً وقيمة (key و value) فهي تشبه ال Map لكن الخلاف بينهما يكمن في أن المفتاح (key) يجب أن يكون object لا يمكن أن يكون من أنواع البيانات البدائية. مثال على ذلك: const wm1 = new WeakMap(), wm2 = new WeakMap(); const o1 = {}, o2 = function() {}; let obj = {}; wm1.set(o1, 37); wm1.set(o2, 'azerty'); wm2.set(o1, o2); //القيمة يمكن أن تكون اي شيء، فيمكن أن تكون // object // أو دالة wm2.set(o3, undefined); wm2.set(wm1, wm2); // ويمكن أن يكون المفتاح والقيمة عبارة عن // WeakMaps // أيضا w2.set("test", "Whoops");// خطأ المفتاح لا يمكن أن يكون من نوع بياني بدائي 1 اقتباس
0 توفيق اسحيمة نشر 25 يناير 2022 الكاتب أرسل تقرير نشر 25 يناير 2022 بتاريخ 47 دقائق مضت قال مسعود زاهي: ال weakSet تسمح لك بتخزين objects في مجموعة، فهي تشبه ال Set يعني أن ما يوجد في المجموعة يكون فريداً من نوعه غير مكرر. الإختلاف الرئيسي بينها وبين ال Set هو أن WeakSet مجموعة من ال objects فقط. يعني انها لا يمكن أن تحتوي على قيمة من نوع بدائي. مثال على ذلك: const visitedSet = new WeakSet(); let john = { name: "John" }; let pete = { name: "Pete" }; visitedSet.add(john); // زارنا John visitedSet.add(pete); // وبعده Pete visitedSet.add("Mary"); // خطأ // ﻷن القيمة هنا من نوع بياني بدائي // الأنواع البيانية البدائية هي: //String, Number, BigInt, Boolean, Symbol أم بالنسبة لل WeakMap فهي مجموعة من الثنائيات كل ثنائية تضم مفتاحاً وقيمة (key و value) فهي تشبه ال Map لكن الخلاف بينهما يكمن في أن المفتاح (key) يجب أن يكون object لا يمكن أن يكون من أنواع البيانات البدائية. مثال على ذلك: const wm1 = new WeakMap(), wm2 = new WeakMap(); const o1 = {}, o2 = function() {}; let obj = {}; wm1.set(o1, 37); wm1.set(o2, 'azerty'); wm2.set(o1, o2); //القيمة يمكن أن تكون اي شيء، فيمكن أن تكون // object // أو دالة wm2.set(o3, undefined); wm2.set(wm1, wm2); // ويمكن أن يكون المفتاح والقيمة عبارة عن // WeakMaps // أيضا w2.set("test", "Whoops");// خطأ المفتاح لا يمكن أن يكون من نوع بياني بدائي شكرا لك على اهتمامك اخي شرح ممتاز من ناحية الكود تقريبا فهمته لكن ما اود ان اعرفه بالتحديد هو متى نحتاج استخدام هاته الخاصيات map set weakMap weakset شكرا لك. بتاريخ 24 دقائق مضت قال Adnane Kadri: قبل محاولة فهم الأطقم والخرائط ضعيفة الإشارة weakSet و weakMap يجب أولا فهم ما هي الخرائط Maps والأطقم Sets من الأساس. لنقم بتناول كل منهما كالتالي: يمكن فهم الأطقم Sets على أنها تجميعات من القيم الفريدة من أي نوع بيانات (سلسلة نصية، مصفوفة .. الخ). بمعنى أن كل عنصر في هاته التجميعة لا يمكن أن يتكرر ضمن نفس المجموعة. إستعمالات شائعة: // إنشاء طقم const letters = new Set(["أ","ب","ت"]); // إضافة قيمة جديدة للطقم letters.add("ج"); // حذف قيمة من الطقم letters.delete("ج"); // التحقق ما كان الطقم يمتلك قيمة ما letters.has("ج"); // حذف كامل القيم من الطقم letters.clear(); يمكن فهم الخرائط Maps على أنها تجميعات من القيم معرفة في أزواج مفتاح-قيمة / key-value حيث يمكن أن تكون هاته المفاتيح أي نوع بيانات. // إنشاء خريطة const platforms = new Map([ ["Mostaql", 500], ["Hsoub.io", 300], ["Orange", 200] ]); // إضافة قيمة جديدة للخريطة platforms.set("Khamsat", 300); // جلب قيمة من الخريطة عن طريق مفتاحها platforms.get("Khamsat"); و الأطقم والخرائط ضعيفة الإشارة تختلف عنها من حيث أنها: تقبل تخزين كائنات فقط، لا يمكن تخزين أنواع أولية فيها. let visitedSet = new WeakSet(); let john = { name: "John" }; visitedSet.add(john); // مسموح visitedSet.add('5'); // غير مسموح تمتلك الأطقم والخرائط ضعيفة الإشارة توابع محدودة وأقل من الأطقم والخرائط العادية. توابع مثل keys أو values لن تكون متوفرة. ما الغرض وراء استعمالها؟ تستعمل أساسا لتخزين البيانات الإضافية المتعلقة بكائن ما. حيث يتم تعيين هذا الكائن كفمتاح لمجموعة البيانات الإضافية الخاصة به. وبالتالي، لو قمنا بمسح هذا الكائن من الذاكرة فستختفي هاته البيانات أيضا. ولنقل كمثال، يريد الطالب Jhon تخزين ملف سري يخصه، بشرط أن خروج هذا الطالب سيعني مسح هذا الملف السري. نقوم بذلك كالتالي: weakMap.set(john, "secret documents"); أي فقدان للكائن john في التطبيق، سيؤدي إلى مسح القيمة المسندة إليه كمفتاح في الخارطة ضعيفة الإشارة. يمكنك الإستزادة بالتعرف عليهما في النوع WeakMap والنوع WeakSet: الخرائط والأطقم ضعيفة الإشارة في جافاسكربت. شكرا على اهتمامك اخي اود بالتحديد معرفة اكثر واهم الحالات التي نحتاج فيها لاستخدام هاته الخصائص بعيدا عن الكود اود ان افهمهم بمعنى عامي حتى يترسخوا بداكرتي اتمنى ان اكون قد وفقت في طرح تساؤلي. شكرا. بتاريخ 58 دقائق مضت قال مسعود زاهي: ال weakSet تسمح لك بتخزين objects في مجموعة، فهي تشبه ال Set يعني أن ما يوجد في المجموعة يكون فريداً من نوعه غير مكرر. الإختلاف الرئيسي بينها وبين ال Set هو أن WeakSet مجموعة من ال objects فقط. يعني انها لا يمكن أن تحتوي على قيمة من نوع بدائي. مثال على ذلك: const visitedSet = new WeakSet(); let john = { name: "John" }; let pete = { name: "Pete" }; visitedSet.add(john); // زارنا John visitedSet.add(pete); // وبعده Pete visitedSet.add("Mary"); // خطأ // ﻷن القيمة هنا من نوع بياني بدائي // الأنواع البيانية البدائية هي: //String, Number, BigInt, Boolean, Symbol أم بالنسبة لل WeakMap فهي مجموعة من الثنائيات كل ثنائية تضم مفتاحاً وقيمة (key و value) فهي تشبه ال Map لكن الخلاف بينهما يكمن في أن المفتاح (key) يجب أن يكون object لا يمكن أن يكون من أنواع البيانات البدائية. مثال على ذلك: const wm1 = new WeakMap(), wm2 = new WeakMap(); const o1 = {}, o2 = function() {}; let obj = {}; wm1.set(o1, 37); wm1.set(o2, 'azerty'); wm2.set(o1, o2); //القيمة يمكن أن تكون اي شيء، فيمكن أن تكون // object // أو دالة wm2.set(o3, undefined); wm2.set(wm1, wm2); // ويمكن أن يكون المفتاح والقيمة عبارة عن // WeakMaps // أيضا w2.set("test", "Whoops");// خطأ المفتاح لا يمكن أن يكون من نوع بياني بدائي تلميح اود بالتحديد معرفة اكثر واهم الحالات التي نحتاج فيها لاستخدام هاته الخصائص بعيدا عن الكود اود ان افهمهم بمعنى عامي حتى يترسخوا بداكرتي اتمنى ان اكون قد وفقت في طرح تساؤلي. اقتباس
0 مسعود زاهي نشر 25 يناير 2022 أرسل تقرير نشر 25 يناير 2022 لا شكر على واجب أخي. سؤال مهم متى نستمع هذه الخواص أظن أن الأمر يحتاج إلى أمثلة لتوضيح إستعمالات كل خاصية: ال Set نستعملها عادة لتخزين قيم غير مكررة ذات أنواع مختلفة، بدائية (primitive) كانت أو كائنات (objects) var set1 = new Set(); set1.add('a'); // ==> Set { 'a' } set1.add(1); // ==> Set { 'a', 1 } set1.add('1'); // ==> Set { 'a', 1, '1' } // القيمة 1 أضيفت سابقا set1.add(1); // ==> Set { 'a', 1, '1’ } //يمكننا أيضا تخزين الكائنات var obj1 = { prop1: 'Hello!' }; set1.add(obj1); // ==> Set { 'a', 1, '1', { prop1: 'Hello!' } } ال WeakSet نستعملها عندما نحتاج فقط لتخزين كائنات (objects) غير مكررة ( لا يمكن تخزين قيم بدائية) const ws = new WeakSet(); const foo = {}; const bar = {}; ws.add(foo); ws.add(bar); ws.has(foo); // true: موجود ws.has(bar); // true: موجود ws.delete(foo); // حذف foo ws.has(foo); // false, غير موجود ws.has(bar); // true, موجود ال Map نستعملها لتخزين ثنائيات ( مفتاح + قيمة). var map1 = new Map(); //القيمة قد تكون أولية مثل //string map1.set(1, 'hello'); // ==> Map { 1 => 'hello’ } // القيمة قد تكون كائن map1.set('jimmy', {x: 'y'}) // ==> Map { 1 => 'hello', 'jimmy' => { lastName: 'farrell' } } // وقد تكون مجموعة var arr1 = ['a', 'b']; map1.set(arr1, [1, 2]); // ==> Map { 1 => 'hello', 'jimmy' => { x: 'y' }, [ 'a', 'b' ] => [ 1, 2 ] } ال WeakMap أيضا نستعملها لتخزين ثنائيات ( مفتاح + قيمة) غير أن المفتاح يجب أن يكون كائنا (Object) 2 اقتباس
السؤال
توفيق اسحيمة
السلام عليكم
هل من الممكن ان يتشرف احد الاخوة ويشرح لي الخاصية weakset بشكل مبسط وسهل الفهم
وكدلك ما هو الفرق بينها وبين الخاصية weakMap
جزاكم الله خيرا.
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.