copyWith والمساواة حسب القيمة
تحديث البيانات غير القابلة للتغيير ومقارنتها حسب القيمة
copyWith والمساواة حسب القيمة درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
تحديث البيانات غير القابلة للتغيير
لا يمكنكم تغيير كائن غير قابل للتغيير، لذا تنشئون كائنًا جديدًا لتحديثه. والنمط الذي ينجز ذلك بسلاسة هو copyWith.
ما الذي يفعله copyWith
تعيد طريقة copyWith كائنًا جديدًا، مع الاحتفاظ بالقيم الحالية للحقول التي تتخطونها، واستبدال الحقول التي تمررونها فقط.
final updated = user.copyWith(name: 'Ada');كتابة copyWith
كل وسيط قابل للقيمة null، وتكون قيمته الافتراضية هي قيمة الحقل الحالية. ويتيح ذلك للمستدعين تجاوز الحقول التي تهمهم فقط.
User copyWith({String? name}) =>
User(name: name ?? this.name);مأزق null
تعني حيلة ?? this.field أنه لا يمكنكم تعيين null لحقل باستخدام copyWith. وتقبل معظم نماذج البيانات هذا القيد البسيط.
المساواة الافتراضية
افتراضيًا، يتساوى كائنان فقط إذا كانا المثيل نفسه. وحتى النسختان المتطابقتان في البيانات تُعدّان مختلفتين.
User('Ada') == User('Ada'); // falseهدف المساواة بالقيمة
غالبًا ما تريدون أن تتساوى الكائنات عندما تتطابق بياناتها، لا هويتها. ويُسمى ذلك المساواة بالقيمة، ويمكنكم تفعيلها اختياريًا.
تجاوز operator ==
عرّفوا operator == لمقارنة الحقول المهمة. وعندها تُعامل الكائنان ذوا البيانات نفسها على أنهما متساويان.
bool operator ==(o) =>
o is User && o.name == name;تجاوز hashCode دائمًا
كلما تجاوزتم ==، يجب أن تتجاوزوا أيضًا hashCode. ويجب أن تشترك الكائنات المتساوية في قيمة hash، وإلا فلن تتصرف Sets وMaps كما ينبغي.
int get hashCode => name.hashCode;المساعد Object.hash
اجمعوا عدة حقول بسهولة باستخدام Object.hash. فهو ينتج رمز hash واحدًا مناسبًا من جميع القيم التي تمررونها.
int get hashCode => Object.hash(name, age);المساواة تعزز المجموعات
مع المساواة بالقيمة، يستطيع Set حذف التكرارات الحقيقية، وتستطيع Map العثور على المفاتيح حسب بياناتها، لا حسب هويتها.
دعوا الأدوات تتولى ذلك
تنشئ حزم مثل equatable أو freezed عوامل == وhashCode وcopyWith نيابةً عنكم، بحيث تظل نماذجكم غير القابلة للتغيير موجزة وصحيحة. 🛠️
تحقق سريع
تحقق سريع من المساواة بالقيمة.
مراجعة
تعلّمتم تحديث البيانات غير القابلة للتغيير باستخدام copyWith، والمقارنة حسب البيانات باستخدام == مع hashCode لتحقيق المساواة الحقيقية بالقيمة. 🌟
الأسئلة الشائعة
هل درس «copyWith والمساواة حسب القيمة» مجاني؟
نعم — نص درس «copyWith والمساواة حسب القيمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «copyWith والمساواة حسب القيمة»؟
تحديث البيانات غير القابلة للتغيير ومقارنتها حسب القيمة تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «copyWith والمساواة حسب القيمة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحقول النهائية وعدم القابلية العميقة للتغيير
- فئات sealed وعبارة switch الشاملة
- معدّلات base وinterface وfinal
- copyWith والمساواة حسب القيمة