وبلاگ

ساختار mutable و immutable در جاوا اسکریپت

وبلاگ

ساختار mutable و immutable در جاوا اسکریپت

حسین قنبری
برنامه نویسی آموزش
1399/3/11
ساختار mutable و immutable در جاوا اسکریپت

بعضی اوقات مفاهیم و ایده ها به آرامی در یک جامعه برنامه نویسی رشد می کنند ، گاهی اوقات به نظر می رسد که در یک زمان کوتاه ظاهر می شوند. از آنجا که React در 2 سال گذشته به صحنه آمد ، به نظر می رسد  مقالاتی که داده های قابل تغییر و تغییرناپذیر را ذکر می کنند ، چند برابر شده ، همچنین کتابخانه هایی مانند Immutable.js به کاربران امکان می دهد از "داده های غیرقابل تغییر" استفاده کنند. من نمی خواهم به آن کتابخانه ها بپردازم ، اما فکر می کنم مفید است که یک راهنمایی سریع راجع به اینکه داده های غیرقابل تغییر در واقع چیست ، چه تفاوتی با داده های قابل تغییر دارد و چرا با اهمیت است

آبجکت قابل تغییر حالتی است که state می تواند بعد از ایجاد تغییر یابد. آبجکت تغییر ناپذیر حالتی است که state بعد از ایجاد آن نمی تواند تغییر یابد. نمونه هایی از مقادیر بومی جاوا اسکریپت که تغییر ناپذیر هستند اعداد و رشته ها هستند. نمونه هایی از مقادیر بومی جاوا اسکریپت که قابل تغییر هستند شامل آبجکت ، آرایه ها ، توابع ، کلاس ها است.

 

چند مثال رو با هم میبینیم .

 

let a = {
    foo: 'bar'
};

let b = a;

a.foo = 'test';

console.log(b.foo); // test
console.log(a === b) // true
let a = 'test';
let b = a;
a = a.substring(2);

console.log(a) //st
console.log(b) //test
console.log(a === b) //false
let a = ['foo', 'bar'];
let b = a;

a.push('baz')

console.log(b); // ['foo', 'bar', 'baz']
console.log(a === b) // true
let a = 1;
let b = a;
a++;

console.log(a) //2
console.log(b) //1
console.log(a === b) //false

 

آنچه می بینیم این است که برای مقادیر قابل تغییر ،  به روزرسانی state در همه منابع به آن متغیر اعمال می شود. بنابراین تغییر یک مقدار در یک مکان ، آن را برای همه مراجع به آن آبجکت تغییر می دهد. برای انواع داده های تغییر ناپذیر ، ما هیچ راهی برای تغییر state داخلی داده ها نداریم ، بنابراین مرجع همیشه به یک آبجکت جدید تبدیل می شود. بزرگترین پیامد این امر این است که برای داده های غیرقابل تغییر ، برابری قابل اطمینان تر است .