الحقول النهائية وعدم القابلية العميقة للتغيير
إنشاء كائنات لا تتغير أبدًا
الحقول النهائية وعدم القابلية العميقة للتغيير درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
غير قابل للتغيير حسب التصميم
الكائن غير القابل للتغيير لا يتغير بعد إنشائه. وهذا يجعل بياناتكم متوقعة وآمنة للمشاركة في أنحاء تطبيقكم. 🔒
تعرّفوا إلى final
يُحدَّد الحقل final مرة واحدة أثناء الإنشاء، ولا يمكن إعادة إسناد قيمة إليه مطلقًا. فهو يثبّت القيمة طوال فترة وجود الكائن.
class Point {
final int x;
Point(this.x);
}إعادة الإسناد خطأ
حاولوا إسناد قيمة جديدة إلى حقل final، وسيمنعكم المصرّف من ذلك. إذ يُكتشف الخطأ قبل تشغيل برنامجكم أصلًا.
final p = Point(3);
p.x = 9; // compile errorfinal مقابل const
استخدموا const عندما تكون القيمة معروفة وقت الترجمة، واستخدموا final عندما تُحسَب القيمة وقت التشغيل. فكلاهما يمنع إعادة الإسناد لاحقًا.
const pi = 3.14;
final now = DateTime.now();منشئات const
امنحوا الصنف const constructor، وسيتمكن Dart من إنشاء كائنات ثابتة فعلًا. ويجب أن تكون جميع حقوله final أيضًا.
class Color {
final int rgb;
const Color(this.rgb);
}كائنات const مشتركة
الكائنان المتطابقان من نوع const هما في الحقيقة الكائن نفسه في الذاكرة. يعيد Dart استخدامهما، مما يوفر المساحة والوقت معًا.
const a = Color(0);
const b = Color(0);
print(identical(a, b)); // trueسطحي مقابل عميق
يمنع الحقل final إعادة الإسناد، لكنه لا يجمّد ما يشير إليه. إذ يمكن أن تظل إضافة عناصر إلى List من نوع final ممكنة.
final nums = [1, 2];
nums.add(3); // allowed!هدف عدم القابلية للتغيير العميق
يعني عدم القابلية للتغيير العميق ألّا يتغير أي شيء يمكن الوصول إليه من الكائن أيضًا. ولتحقيق ذلك بالكامل، تحتاجون إلى ما هو أكثر من final.
تجميد المجموعات
غلّفوا القائمة باستخدام List.unmodifiable كي تؤدي أي محاولة للإضافة أو الحذف إلى طرح استثناء. وهكذا تظل البنية بأكملها مجمّدة.
final tags = List.unmodifiable([1, 2]);
tags.add(3); // throws at runtimeثوابت المجموعات الحرفية
ضعوا const قبل القيمة الحرفية للحصول على مجموعة غير قابلة للتغيير بعمق، ومحددة وقت الترجمة. ولا يمكن تعديلها إطلاقًا.
const days = ['Mon', 'Tue'];
// days.add(...) is forbiddenلماذا يهم ذلك
البيانات غير القابلة للتغيير آمنة في بيئة الخيوط، وسهلة التخزين المؤقت، وملائمة لـإدارة الحالة في Flutter. وتختفي ببساطة الأخطاء الناتجة عن التغيير الخفي.
تحقق سريع
تحقق أخير من final وعدم القابلية للتغيير.
مراجعة
تعلّمتم أن final يثبّت الحقل، وأن const يثبّت القيم المحددة وقت الترجمة، وأن عدم القابلية للتغيير بعمق يتطلب مجموعات غير قابلة للتعديل أو مجموعات const. 🎉
الأسئلة الشائعة
هل درس «الحقول النهائية وعدم القابلية العميقة للتغيير» مجاني؟
نعم — نص درس «الحقول النهائية وعدم القابلية العميقة للتغيير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «الحقول النهائية وعدم القابلية العميقة للتغيير»؟
إنشاء كائنات لا تتغير أبدًا تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «الحقول النهائية وعدم القابلية العميقة للتغيير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الحقول النهائية وعدم القابلية العميقة للتغيير
- فئات sealed وعبارة switch الشاملة
- معدّلات base وinterface وfinal
- copyWith والمساواة حسب القيمة