مفهوم Mutable و Immutable در جاوااسکریپت
Mutable: به اشیاء یا دادههایی اطلاق میشود که میتوانند تغییر کنند. به عبارت دیگر، اگر یک شیء mutable را تغییر دهید، خود شیء تغییر میکند و نیازی به ایجاد یک شیء جدید ندارید. Immutable: برعکس، به دادههایی گفته میشود که پس از ایجاد، قابل تغییر نیستند. اگر بخواهید محتوای یک داده immutable را تغییر دهید، باید یک شیء جدید بسازید. در جاوا اسکریپت، انواعی مانند آرایهها و اشیاء به طور پیشفرض mutable هستند. یعنی شما میتوانید مقادیر داخل آنها را تغییر دهید بدون اینکه خود شیء یا آرایه عوض شود.
let arr = [1, 2, 3];arr[0] = 10; // تغییر مقدار اولین عنصرconsole.log(arr); // [10, 2, 3]
در این مثال، مقدار اولین عنصر آرایه تغییر کرده است، اما خود آرایه بدون تغییر باقی مانده است. برخی از انواع داده در جاوا اسکریپت immutable هستند. String، Number و Boolean از این دستهاند. به عنوان مثال، اگر یک متغیر از نوع string را تغییر دهید، در واقع یک string جدید ساخته میشود و مقدار متغیر قبلی تغییر نمیکند.
let str = "Hello";str[0] = "h"; // این تغییر در string اعمال نمیشودconsole.log(str); // "Hello"
در اینجا، اگرچه تلاش کردهایم که اولین حرف را تغییر دهیم، اما هیچ تغییری در مقدار متغیر str رخ نمیدهد. این به این دلیل است که رشتهها (Strings) در جاوا اسکریپت immutable هستند. دادههای mutable انعطافپذیری بیشتری دارند، زیرا میتوانید مقادیر داخل آنها را در هر زمانی تغییر دهید. این ویژگی زمانی مفید است که بخواهید دادهها را به صورت تدریجی تغییر دهید یا درون یک ساختار پیچیده ذخیره کنید. اما باید دقت کنید که تغییرات ناخواسته میتواند به مشکلاتی منجر شود.
let user = { name: "Ali", age: 30};user.age = 31; // تغییر سن بدون نیاز به ایجاد شیء جدیدconsole.log(user); // { name: 'Ali', age: 31 }
دادههای immutable معمولاً در شرایطی مفید هستند که شما بخواهید از تغییرات ناخواسته جلوگیری کنید. برای مثال، در برنامهنویسی تابعی، معمولا ترجیح داده میشود که از دادههای immutable استفاده کنید تا به راحتی بتوانید دادهها را بدون نگرانی از تغییرات ناخواسته مدیریت کنید.
const arr = [1, 2, 3];const newArr = [...arr]; // ایجاد یک آرایه جدیدnewArr[0] = 10;console.log(arr); // [1, 2, 3]console.log(newArr); // [10, 2, 3]
در این مثال، آرایهی arr تغییر نمیکند و برای تغییر، یک آرایه جدید ساخته شده است. درک تفاوت بین mutable و immutable به شما کمک میکند تا در هنگام طراحی و نوشتن کد، تصمیمات بهتری بگیرید. دادههای mutable به شما انعطاف بیشتری میدهند، اما در عوض ممکن است به مشکلاتی مانند تغییرات ناخواسته منجر شوند. دادههای immutable اگرچه انعطافپذیری کمتری دارند، اما از نظر مدیریت تغییرات و جلوگیری از اشتباهات بسیار مفیدند.