الدرس 8: كائنات القيمة و records
عندما يكون السعر مجرد decimal والعملة مجرد string، لا شيء يمنعك من جمع الشواكل مع الدولارات أو تعديل مبلغ في منتصف عملية حسابية. في هذا الدرس نبني كائنات قيمة باستخدام records في C# — قيم غير قابلة للتغيير تُقارَن بالقيمة — بحيث تُمنع مثل هذه الأخطاء وقت الترجمة.
كائن القيمة يشبه ورقة نقدية من فئة 20 شيكل: لا يهم أي ورقة بالضبط حصلت عليها — القيمة وحدها هي المهمة. ولا يمكنك «تعديل» ورقة نقدية — بل استبدالها بأخرى فقط.
- كائن القيمة
- قيمة تُعرَّف فقط ببياناتها — سعران بقيمة 10 ILS هما القيمة نفسها، دون هوية منفصلة. غير قابلة للتغيير دائمًا.
- نوع record
- نوع في C# يولّد فيه المترجِم من تصريح واحد المساواة بالقيمة (Equals/==)، وخصائص init-only، وبانيًا، و ToString.
- عدم القابلية للتغيير
- حالة الكائن لا تتغير أبدًا بعد الإنشاء. يُنفَّذ «التغيير» بتعبير with — نسخة جديدة بالقيمة المحدَّثة، والأصل سليم.