
آموزش کار کردن با رکورد ها (Record ها) در سی شارپ
کارکردن با رکورد ها (Record ها) در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی کارکردن با قابلیت جدید رکورد ها (Record ها) در سی شارپ می باشد که با نام اصلی Working with C# 9 Records از شرکت Pluralsight منتشر شده است.
مزیت های رکورد ها (Record ها) درسی شارپ
رکورد ها قابلیت های مختلفی را ارائه می دهند که مهم ترین آنها را در قسمت زیر برای شما قرار داده ایم.

- یک Syntax ساده و تمیز به منظور ایجاد کردن Refrence Type هایی که Property های immutable دارند.
- امکان اضافه کردن رفتار و یا Behavior به منظور داشتن Refrence Type های داده محور و یا data-centric.
- امکان پیاده سازی تصاویر مبتنی بر مقادیر و یا Value equality.
- یک Syntax ساده و تمیز به منظور ایجاد کردن تغییرات غیر مخرب و یا اصطلاحاً nondestructive mutation.
- قابلیت های درونی به منظور فرمت بندی کردن داده ها برای نمایش داده شدن به کاربر.
- پشتیبانی کردن از سلسله مراتب های وراثت.
دقت کنید که بدون استفاده کردن از Record ها می توانید Type های data-centric ایجاد کنید. به منظور انجام این کار می توانید از structure ها استفاده کنید. در structure ها نیز قابلیت value equality و یا تساوی مبتنی بر مقادیر وجود دارد. در structure ها نیز امکان اضافه کردن رفتار و یا Behavior وجود دارد اما در ایجاد کردن Data Model های نسبتاً بزرگ استفاده کردن از structure ها معایب مختلفی را دارند که در ادامه به آن می پردازیم.
معایب Structure ها در در ایجاد کردن Data Model های نسبتاً بزرگ
- structure ها در زبان برنامه نویسی سی شارپ از وراثت و یا inheritance پشتیبانی نمی کنند.
- structure ها در پیاده سازی کردن تساوی مبتنی بر مقادیر و یا value equality عملکرد ضعیف تری دارند. برای value type ها می توان از متد Equals استفاده کرد. این متد از reflection به منظور پیدا کردن تمامی فیلدها استفاده می کند. (ضمناً می توانید از آموزش Reflection در زبان برنامه نویسی سی شارپ استفاده کنید.) این در حالی است که در زمان استفاده کردن از record ها کامپایلر متد Equals را ایجاد و یا generate می کند. در عمل پیاده سازی تساوی مبتنی بر مقادیر value equality در record ها به مراتب سریع تر انجام می شود.
- structure ها از حافظه بیشتری در برنامه نویسی استفاده می کنند. دلیل این موضوع نیز این است که هر instance و یا نمونه از یک structure یک کپی کامل از تمامی مقادیر آن structure است. این در حالی است که record ها به صورت refrence type پیاده سازی شده اند. بنابراین یک instance از یک record فقط شامل یک refrence به داده ها می باشد.
- غیر قابل تغییر دادن و یا immutability. یک رکورد لزوماً غیر قابل تغییر و یا immutability نیست. شما در یک record می توانید property هایی را تعریف کنید که set accessors دارند و علاوه بر این می توانید فیلد هایی را داشته باشید که readonly نباشند. با این وجود هرچند که می توان record ها را به صورت قابل تغییر mutable, تعریف کرد اما استفاده کردن از record ها برای ساختن Data Model های immutable بسیار توصیه می شود.
در record ها می توانید به سادگی property هایی را تعریف کنید که با استفاده از positional syntax به صورت immutable تعریف می شوند. وضعیت immutable بودن زمانی می تواند بسیار مفید باشد که می خواهید type داده محور و یا data-centric تعریف کنید که به صورت thread-safe هم عمل کند. علاوه بر این زمانی که می خواهید hash code مربوط به یک instance در یک hash table یکسان باقی بماند record ها می توانند بسیار مفید باشند.

استفاده کردن از record ها می تواند از ایجاد شدن باگ هایی که در زمان انتقال دادن یک argument به صورت by reference ایجاد می شوند نیز جلوگیری کنند. در چنین شرایطی یک متد ممکن است به صورت کاملاً تصادفی مقدار مربوط به آن argument را تغییر دهد. با استفاده از record ها که به صورت غیر قابل تغییر immutable تعریف شده اند چنین خطا هایی رخ نخواهند داد.
چه زمانی Record را به جای Class در C# انتخاب کنیم؟
در C# 9، نوع Record راهی برای تعریف دادههایی فراهم میکند که مقایسه و کپیکردن آنها بر اساس مقدار اهمیت دارد. آموزش Working with C# 9 Records تفاوت Record و Class را بررسی میکند تا بتوانید هنگام طراحی مدلهای داده، انتخاب آگاهانهتری داشته باشید. این موضوع بهویژه زمانی مفید است که یک شیء بیشتر نماینده مجموعهای از مقادیر باشد تا موجودیتی با هویت مستقل. با بررسی Reference Typeها و بازنویسی کدهای مبتنی بر Class، میآموزید چه بخشهایی از پیادهسازی میتوانند با Record سادهتر و خواناتر شوند.
یکی از محورهای اصلی آموزش، Immutability یا تغییرناپذیری دادههاست. وقتی انتظار دارید مقدار یک شیء پس از ساخته شدن ثابت بماند، طراحی تغییرناپذیر میتواند احتمال تغییرات ناخواسته را کاهش دهد و رفتار کد را قابل پیشبینیتر کند. آموزش به کاربرد Immutability در Front-end Applicationها نیز اشاره میکند و ارتباط این رویکرد را با مدیریت دادهها نشان میدهد. با درک این مفاهیم، میتوانید تشخیص دهید که آیا یک مدل در برنامه شما به رفتار معمول Class نیاز دارد یا تعریف آن بهصورت Record با شیوه استفاده از دادهها سازگارتر است.
آشنایی با متدهای تولیدشده، کپی و وراثت در Recordها
Recordها علاوه بر شکل تعریف داده، رفتارهایی دارند که کامپایلر بهصورت خودکار برای آنها فراهم میکند. در این آموزش با Synthesized Methodها و نحوه استفاده عملی از قابلیتهایی مانند Destructuring آشنا میشوید؛ قابلیتی که استخراج مقادیر یک Record را در کد سادهتر میکند. همچنین عملیات Cloning بررسی میشود تا بتوانید مفهوم ایجاد نسخهای از یک شیء را در این نوع داده بهتر درک کنید. این امکانات به کاهش کدهای تکراری کمک میکنند، درحالیکه ساختار مدل داده همچنان روشن و قابل فهم باقی میماند.
موضوعات پیشرفتهتر آموزش شامل تعریف Record Typeهای سفارشی، انتقال پارامترها با ارجاع و بررسی وراثت و Polymorphism است. همچنین Virtual Memberها مطرح میشوند تا ارتباط Recordها با قابلیتهای شیءگرایی C# روشن شود. این بخش برای برنامهنویسانی مناسب است که با Classها آشنا هستند و میخواهند درک دقیقتری از رفتار Recordها در طراحی مدلهای پیچیدهتر به دست آورند. با کنار هم قرار دادن مقایسه نوعها، متدهای تولیدشده و قابلیتهای وراثت، میتوانید محدودیتها و مزایای این ساختار را هنگام بازطراحی کد ارزیابی کنید و از آن در جاهایی استفاده کنید که با نیازهای مدل داده سازگار است.
سرفصل مطالب آموزش ویدیویی کار کردن با رکورد ها (Record ها) در سی شارپ
فصل اول: مقدمه دوره آموزشی
- مقدمه دوره آموزشی
فصل دوم: بررسی قابلیت غیر قابل تغییر بودن و یا Immutability
- ورژن های مربوط به ابزار های این دوره آموزشی
- مقدمه
- بررسی Class ها و Refrence type ها
- مقایسه کردن Record ها با Class ها
- نیاز به Immutability
- استفاده از Immutability در Front-end Application ها
- جمع بندی
فصل سوم: کار کردن عملی با Record ها
- مقدمه
- Refactor کردن کد و استفاده کردن از Record ها به جای Class ها
- استفاده کردن از Destructuring
- انتقال دادن پارامتر ها به صورت by Reference
- انجام عملیات Cloning
- ساختن Record Type های سفارشی
- بررسی وراثت و Polymorphism
- جمع بندی
فصل چهارم: کار کردن با متد های تولید شده و یا Synthesized Method ها
- مقدمه
- بررسی Virtual Member ها
- متد های تولید شده و یا Synthesized Method ها چه هستند؟
- تبدیل کردن به یک String
- بررسی تصاویر و یا Equality
- جمع بندی







