Dart Academy · درس

Extensions على Generics

وسّع List وIterable ومعاملات الأنواع

الدرس 2 من 413 خطوة

Extensions على Generics درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.

توسيع مجموعات البيانات

يظهر السحر الحقيقي عند توسيع الأنواع العامة مثل List أو Iterable. يمكن لامتداد واحد مساعدة كل أنواع العناصر دفعة واحدة.

صرّح بمعامل نوع

ضع type parameter بعد اسم الامتداد، ثم استخدمه في عبارة on. وهكذا تظل أداتك المساعدة آمنة نوعيًا بالكامل.

extension Firsts<T> on List<T> {
  T? get firstOrNull => isEmpty ? null : this[0];
}

ينتقل نوع العنصر عبر البنية

لأنك كتبت List of T، تعيد طريقتك نوع العنصر الصحيح تلقائيًا. لا حاجة إلى التحويل، ولا مفاجآت ناتجة عن dynamic.

List<int> nums = [1, 2, 3];
int? n = nums.firstOrNull; // typed as int?

وسّع Iterable للوصول الأوسع

إن توسيع Iterable بدلًا من List يجعل أداتك المساعدة تعمل مع القوائم والمجموعات والتكرارات الكسولة على حد سواء. وصول أوسع، والشيفرة نفسها.

extension Counts<T> on Iterable<T> {
  int countWhere(bool Function(T) f) => where(f).length;
}

طرق عامة داخلية

يمكن لطريقة الامتداد أن تقبل معاملات generic خاصة بها أيضًا، مستقلة عن النوع الذي توسّعه.

extension Mapping<T> on List<T> {
  List<R> mapTo<R>(R Function(T) f) => map(f).toList();
}

يساعدك استنتاج النوع

عادةً ما تستنتج Dart معاملات النوع من القيمة التي تستدعي الطريقة عليها، لذلك تبقى مواضع الاستدعاء مختصرة وواضحة.

var first = ["a", "b"].firstOrNull; // String?

وسّع Map بنوعين

تحتاج الخرائط إلى معاملين. اكتب Map of K, V، ويمكنك عندها إنشاء أدوات مساعدة تراعي المفاتيح والقيم معًا.

extension MapPick<K, V> on Map<K, V> {
  V? pick(K key) => this[key];
}

حافظ على أمان القيم الفارغة

يشير إرجاع T? بدلًا من T إلى أن القيمة قد تكون مفقودة، مما يجعل المستدعين يتعاملون بصدق مع أمان القيم الفارغة.

extension SafeLast<T> on List<T> {
  T? get lastOrNull => isEmpty ? null : last;
}

أعد الاستخدام مع أنواع العناصر المختلفة

يخدم امتداد عام واحد every أنواع العناصر. تعمل الطريقة نفسها firstOrNull مع الأعداد والنصوص وفئاتك الخاصة.

var who = <User>[].firstOrNull; // User?

قيّد النوع عند الحاجة

إذا احتاجت أداتك المساعدة إلى قدرات محددة، فأضف bound باستخدام extends، بحيث لا يُسمح إلا بأنواع العناصر المناسبة.

extension Sums<T extends num> on List<T> {
  num total() => fold(0, (a, b) => a + b);
}

لماذا تتفوق الامتدادات العامة

تجمع هذه الامتدادات بين إعادة الاستخدام والأمان: اكتب الأداة المساعدة مرة واحدة، وستتكيف مع أي element type مع الحفاظ على نوع الإرجاع الصحيح.

تحقق سريع

تحقق سريع من الحفاظ على أمان الامتدادات نوعيًا.

مراجعة: الامتدادات العامة

يمكنك إضافة type parameter إلى الامتداد، واستهداف List أو Iterable أو Map، بل وتقييده باستخدام extends للحفاظ على قابلية إعادة الاستخدام والأمان. ✅

البدء مجانًا

تعلم Dart مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
30
الدروس
120

الأسئلة الشائعة

هل درس «Extensions على Generics» مجاني؟

نعم — نص درس «Extensions على Generics» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.

ماذا ستتعلم في «Extensions على Generics»؟

وسّع List وIterable ومعاملات الأنواع تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟

لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «Extensions على Generics»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟

نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. كتابة أول Extension لك
  2. Extensions على Generics
  3. أعضاء Extension الثابتة والتعارضات
  4. Extension Types للتغليف من دون تكلفة
← العودة إلى Dart Academy