فرق بین Immutable و Mutable
من به شخصه همیشه سره این دو بزرگوار مشکل داشتم، پس تصمیم گرفتم که این بلاگ رو آماده کنم :).
تغییر ناپذیر و تغییر پذیر:
این دو کلمه انگلیسی هستند که Immutable به معنای تغییر ناپذیر میباشد و Mutable به معنای تغییر پذیر. خب واضح است که در گوگل ترنسلیت که بزنین معنیاشو میتونین در بیارین. اما توی برنامه نویسی چه استفاده هایی میشه؟
در برنامه نویسی ما با این دو کلمه زیاد کار داریم، چرا که باید متغیر هایی تعریف کنیم که یا تغییر پذیر باشند و یا تغییر ناپذیر.
یعنی چی؟
1. تغییر ناپذیر:
ببینید شما ممکنه توی ران تایم برنامه و درحالی که برنامه در حال اجراست نمیخواهید که مقدار یکی از متغیرهای شما تغییر کند، ممکنه این مقدار یک کلید امنیتی باشه، یک عدد خاص باشه و یا هرچیزه دیگه، در هر صورت شما نمیخوایین که این متغیر در طول اجرای برنامه تغییر کنه; پس شما در این حالت میایین و اونو تغییر ناپذیر و یا Immutable قرار میدید.
که خب در سی شارپ (#C) شما میتوانید با کلمه کلیدی Const یک متغیری تعریف کنید که تغییر ناپذیر باشد.
و یا میتوانید از Record استفاده کنید که نوعی کلاس هستش که در 9 #C معرفی شد استفاده کنید.
که به راحتی میتونید یک کلاس رکورد معرفی کنید و متغیرهایتان را در آن معرفی کنید و وقتی اون متغیر را در بدو ایجاد شئ مقدار بدین دیگه قابل مقدار دهی در طول برنامه نیست مگر این که آن را از حالت immutable درارید.
در سی شارپ روش های دیگری برای تعریف کردن متغیرهای تغییر ناپذیر وجود دارد:
استفاده از کلمه readonly
و یا استفاده تنها از get پراپرتی که در این شرایط باید یک مقدار اولیه به صورت دستی بهش بدین.
به این نوع تعریف متغیر فقط خواندنی هم میگن که شما در مرحله تعریف متفیر فقط میتوانید به آن مقدار دهید.
2. تغییر پذیر:
در برنامه نویسی تقریبا میشه گفت تمامی متغیرهایی که به صورت ساده تعریف میکنید تغییر پذیر و با mutable میباشند.
یعنی شما میتونی توی خط اول، یک مقداری بهش بدی مثلا 2 و در خط های بعدی به راحتی عدد درون این متغیر را عوض کنید.
دقیقا بر خلاف immutable عمل میکند.
منابع:
What is the difference between a mutable and immutable string in C#?
How do I declare an immutable variable (value) in C#? [duplicate]
How to create an immutable type in C#.
What are the benefits to marking a field as `readonly` in C#?
مطلبی دیگر از این انتشارات
میخوام برنامه نویس شم ولی نمیدونم از کجا شروع کنم!
مطلبی دیگر از این انتشارات
آیا هرکسی میتواند برنامه نویس شود؟
مطلبی دیگر از این انتشارات
حافظه هیپ (Heap) و استک (Stack) در برنامه نویسی.