آموزش ویژگی های ECMAScript 6 (جلسه 22) : آموزش Set و WeakSet

- visibility ۰ mode_comment

همونطور که اطلاع دارید در جلسه قبل در مورد Destructuring در آرایه ها براتون توضیحاتی رو قرار دادیم و شما رو بصورت کامل با اون آشنا کردیم. در این جلسه میخوایم در مورد Set و WeakSet که در ES6 معرفی شده اند، توضیحاتی رو قرار بدیم. برای این آموزش از این لینک و این لینک به عنوان منبع استفاده میکنیم.

Set و WeakSet هر دو شئ یا Object هستند. Set یک مجموعه یا Collection هست که مقادیر با انواع مختلف رو در خودش قرار میده. Set این ضمانت رو به شما میده که هیچ مقدار تکراری رو درون خودش قرار نده. شما هر نوع مقدار Primitive یا اصلی و یا شئ و Object (دارای ارجاع) رو درون Set ذخیره سازی کنید. همونطور که میدونین در Javascript شش نوع مقدار Primitive وجود داره:

  1. اعداد یا Number
  2. رشته ها یا String
  3. Boolean شامل true و false
  4. null
  5. undefined
  6. Symbol (مقدار جدید اضافه شده در ES6)

هر کدام از موارد بالا به همراه اشیاء رو میتونین در Set ذخیره سازی کنید و یک مجموعه یکتا به وجود بیارید. برای به وجود آوردن یک Set بصورت زیر عمل میکنیم:

همونطور که میبینید با استفاده از عملگر new یک نمونه جدید بنام mySet از سازنده Set به وجود آوردیم. پس mySet یک شئ از نوع Set می باشد. اگر درون پرانتز هیچ چیزی قرار ندیم و یا اینکه null رو به اون پاس بدیم، در هر دو صورت یک Set خالی یا Empty به وجود خواهد اومد. در خط 3 این set رو در Console چاپ کردیم. خروجی بصورت زیر خواهد بود:

میبینید که یک شئ از نوع Set در Console چاپ شده و ویژگی ها و متدهای اون بصورت کامل در اینجا قرار گرفته. در ادامه آموزش این متدها رو به شما آموزش خواهیم داد. با استفاده از متد add میتونیم یک عضو جدید رو به set اضافه کنیم. کد زیر رو در نظر بگیرید:

میبینید که در خط 3 عدد 1 رو به mySet اضافه کردیم و در خط بعد نیز عدد 5 رو اضافه کردیم. در خط 5 میخوایم دوباره عدد 5 رو اضافه کنیم. در این مواقع set بصورت اتوماتیک متوجه میشه که 5 تکراری هست و اون رو مجددا به لیست اضافه نمیکنه. در خط 6 یک رشته رو به مجموعه اضافه کردیم. در خط 8 یک شئ بنام o به وجود آوردیم و در خط 9 اون رو به مجموعه اضافه کردیم. در خط 11 میخوایم مجددا همون شئ رو به مجموعه اضافه کنیم. شاید پیش خودتون فکر کنید که به دلیل اینکه این دو شئ تکراری هستند، پس set به اون اجازه ورود نمیده و اصلا اضافه نمیشه. اما اشیاء با مقادیر Primitive تفاوت دارند و با ارجاع فرستاده میشن و از اونجایی که Reference این دو شئ با هم فرق داره، پس یکسان نیستند و میتونن همزمان در مجموعه قرار داشته باشند. حالا اگر در خط آخر mySet رو در Console چاپ کنیم، خروجی بصورت زیر خواهد بود:

همونطور که میبینید 5 عضو درون Set قرار داده شده اند و میتونین مقادیر اونا رو در تصویر بالا مشاهده کنید. خب حالا میتونیم از متدهای has و size و delete و ... استفاده کنیم. بصورت زیر:

همونطور که میبینید با استفاده از متد has بررسی میکنیم که عضو مورد نظر درون مجموعه قرار دارد یا خیر. اگر وجود داشته باشه true و در غیر انصورت false برگشت داده میشه. در خط 8 ویژگی size رو استفاده کردیم و چون این مجموعه 5 عضو داره، خروجی اون 5 خواهد بود. در خط 10 اومدیم و مقدار 5 رو از مجموعه با استفاده از متد delete حذف کردیم و بعد از اون دوباره از متدهای has و size استفاده کردیم. با استفاده از متد clear هم میتونیم همه اعضای مجموعه رو حذف کنیم. بصورت زیر:

به همین راحتی. اگر بخوایم یک حلقه قرار بدیم و به همه مقادیر مجموعه دسترسی داشته باشیم، میتونیم از forEach استفاده کنیم. بصورت زیر:

در خط 1 یک مجموعه جدید با سه عضو به وجود آوردیم و در خط 3 یک forEach نوشتیم و تابع مورد نظر برای هر عضو درون مجموعه یکبار اجرا میشه و key و value در Console چاپ میشه. خروجی در مرورگر بصورت زیر خواهد بود:

به همین راحتی. شما به راحتی میتونین یک آرایه رو به Set تبدیل کنید. بصورت زیر:

میتونین بصورت برعکس هم عمل کنید و یک Set رو به آرایه تبدیل کنید. بصورت زیر:

میبینید که با استفاده از Rest Operator مجموعه مورد نظر رو به آرایه تبدیل کردیم.

تا اینجا در مورد Set گفتیم و حالا میخوایم وارد مبحث WeakSet ها بشیم. به Set ها Strong Set هم میگن و یعنی رابطه قوی با اشیائی که درونش قرار میگیرن برقرار میکنه و دیگه کاری به ارجاع اون نداره. اما WeakSet ها مجموعه ای هستند که فقط اشیاء رو درون خودشون جا میدن (بر خلاف Set که 6 نوع داده Primitive رو نیز در خودش جا میده) و همچنین خیلی از متدهایی که Set داره رو ندارد. زمانی که برای خالی کردن فضای حافظه مموری Garbage Collection انجام میشه و مثلا یک شئ رو برابر با null قرار میدین، اون شئ از WeakSet حذف میشه ولی در Set کماکان باقی میمونه. برای مطالعه بیشتر در این زمینه، این لینک و این لینک رو مطالعه کنید. کد زیر رو در نظر بگیرید:

همونطور که دیدید در خط 1 یک WeakSet خالی رو به وجود آوردیم و در خط 2 و 3 نیز دو شئ رو تعریف کردیم. با استفاده از متد add این اشیاء رو به WeakSet اضافه کردیم. با استفاده از متد has هم میتونیم بررسی کنیم که یک عضو وجود داره یا خیر. در خطوط آخر نیز window رو حذف کردیم و بعد از اون وجود اون رو چک کردیم و خروجی false خواهد بود. در کل خیلی کم از WeakSet استفاده میشه و در زمینه های خیلی خاص که مربوط به حافظه و ... هست ازش استفاده میشه. همون Set رو به خوبی یاد بگیرید، کفایت میکنه.

موفق و پیروز باشید.

یا علی

comment دیدگاه کاربران

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.