مخلص کلامِ immutability

29 مهر 1398 - علوم رایانه

در زبان‌های برنامه‌نویسی با دو نوع از ساختار داده‌ها روبرو هستیم که به mutable و immutable تقسیم می‌شوند. احتمالاً خیلی برداشت‌ها بشه از معنای این دو نوع کرد ولی در حقیقت Immutability به معنای این نیست که ما تغییر داده رو منع می‌کنیم. در اصل Immutability بیشتر در مورد چگونگی تغییر داده‌ها صحبت می‌کنه. ما همچنان می‌تونیم به یه آرایه یه مقدار اضافه کنیم؛ داستان اینه که توی زمانی که داده‌‌ی ما Immutable هست فقط ما این کار رو به طور متفاوتی انجام می‌دیم.در دنیای mutable می‌تونیم به طور مستقیم توی یه آرایه یه مقدار جدید اضافه کنیم ولی توی دنیای immutable یه آرایه جدید ساخته می‌شه که توی مقدار جدید به آرایه جدیده اضافه شده. مفهم اصلی که باید درک کنیم فقط اینه که به جای تغییر مستقیم چیزی باید چیز جدید بسازیم و تغییرات رو روی اون اعمال کنیم.پس متوجه شدیم که immutability به معنای این هست که ما نمی‌تونیم خود داده رو مستقیماً تغییر بدیم. ولی راهی که وجود داره اینه که ما یه فانکشنی رو صدا می‌زنیم و اون فانکشن داده‌ی ما و مقداری جدید رو می‌گیره و یه داده‌ی جدید  با تغییرات اعمال شده به ما برمی‌گردونه.یه مثال خیلی ساده بزنم که باور کنید ما مدت‌ها ست با این مفهموم توی تمام زبان‌های برنامه‌نویسی کار می‌کنیم و فقط بهش دقت نکردیم. شما قطعاً با اعداد و عملگرهای ریاضی توی زبان‌های مختلف کار کردید دیگه! اعداد یا نوع داده‌های int , number از نوع immutable هستند و عملگرهای +، -، *، / همون فانکشن‌هایی هستند که به جای اینکه یه داده رو تغییر بدند اون داده رو می‌گیرند و تغییرات رو روش اعمال می‌کنند و یه مقدار جدید رو برمی‌گردونند. مقدار اولیه‌ی ما همچنان دست نخورده وجود داره و سرجاش می‌مونه.

مزایای Immutability چیه؟

  • کارایی و performance اپلیکیشن ما افزایش پیدا می‌کنه.
  • برنامه‌نویسی و دیباگ کردن راحت‌تر می‌شه به این طور که وقتی شما در طول لایف‌سایکل یه متغیر مطمئن باشی که هرگز تغییر نمی‌کنه خب با خیال راحت می‌تونی ازش استفاده کنی تا متغیری که ممکنه هر توی هر فانکشنی یا هر جایی از لایف‌سایکلش مقدار متفاوتی داشته باشه.
  • توی multi-threading یا چندریسمانی مشکلات کمتر می‌شه به این دلیل که داده‌ای که هیچوقت تغییر نمی‌کنه لازم نیست که lock بشه تا چندین تِرِد synchronize بشند.
  • مقایسه‌ی مقدار متغیرها در بعضی موارد بهبود پیدا می‌کنه مثل مقایسه‌ی عمیق یا deep comparison توی آبجکت‌ها