معاملات الأنواع المقيّدة باستخدام extends
قيّد ما يمكن للنوع العام قبوله
معاملات الأنواع المقيّدة باستخدام extends درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.
عندما يكون قبول أي نوع أكثر من اللازم
تقبل معلمة النوع العادية كل الأنواع، لكنكم قد تحتاجون أحيانًا إلى أكثر من ذلك. فقد ترغبون في استدعاء أسلوب لا توفره إلا أنواع معينة. 🔒
القيد باستخدام extends
يمكنكم إضافة قيد باستخدام extends. وهذا يعني أن معلمة النوع يجب أن تكون من نوع معين أو نوعًا فرعيًا منه.
class Cage<T extends Animal> {}ما الذي يضمنه القيد
يثق Dart الآن، داخل الصنف، بأن T من النوع Animal على الأقل. لذلك يمكنكم استخدام أي عضو يعرّفه Animal بأمان.
class Cage<T extends Animal> {
void feed(T a) => a.eat();
}رفض الأنواع غير الصحيحة
يمنع المصرّف أي وسيط نوع لا يستوفي القيد. وتمرير نوع لا علاقة له بذلك يؤدي إلى خطأ يظهر فورًا.
Cage<String>();قيد عددي
من القيود الشائعة num، وهو النوع الأب لكل من int وdouble. ويتيح ذلك للنوع العام إجراء العمليات الحسابية مع قبول كلا نوعَي الأعداد.
T addOne<T extends num>(T x) => x + 1 as T;القيود في الأساليب
تعمل القيود مع الأساليب العامة أيضًا، وليس مع الأصناف فقط. ضعوا extends مباشرةً بعد اسم معلمة النوع في الأسلوب.
num biggest<T extends num>(List<T> xs) =>
xs.reduce((a, b) => a > b ? a : b);القيد الافتراضي هو Object
عند حذف القيد، يكون القيد الضمني هو Object?. ولهذا لا يتيح T غير المقيّد إلا استخدام الأعضاء الموجودة في كل كائن.
قيد Comparable
للترتيب أو المقارنة، اربطوا النوع بـ Comparable. عندها يمكنكم استدعاء compareTo على القيم داخل الشفرة العامة.
T max<T extends Comparable<T>>(T a, T b) =>
a.compareTo(b) >= 0 ? a : b;القيود توضح الغرض
يوضح القيد للقارئ أيضًا أنواع القيم المناسبة هنا. فالتوقيع نفسه يشرح العقد الذي تتوقعه الشفرة.
قيود تشير إلى نفسها
لاحظوا أن T يمكن أن تظهر في قيدها الخاص، مثل T extends Comparable of T. يربط هذا النمط النوع بالعمليات التي تُجرى عليه.
أبقوا القيود في أضيق نطاق مناسب
استخدموا القيد الأقل تشددًا الذي يحقق الغرض. فالتقييد المفرط يمنع أنواعًا صحيحة، بينما يؤدي غياب القيد تمامًا إلى حجب أساليب مفيدة.
تحقق سريع
ما الذي يتيح لكم القيد فعله داخل الصنف؟
مراجعة
استخدمتم extends لتقييد معلمة نوع، مما أتاح أساليب النوع المقيِّد ورفض الأنواع غير المرتبطة. أبقوا القيود مرنة بالقدر الذي يتطلبه الغرض. ✅
الأسئلة الشائعة
هل درس «معاملات الأنواع المقيّدة باستخدام extends» مجاني؟
نعم — نص درس «معاملات الأنواع المقيّدة باستخدام extends» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.
ماذا ستتعلم في «معاملات الأنواع المقيّدة باستخدام extends»؟
قيّد ما يمكن للنوع العام قبوله تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟
لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «معاملات الأنواع المقيّدة باستخدام extends»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟
نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا تتفوق Generics على dynamic
- الفئات والطرق العامة
- معاملات الأنواع المقيّدة باستخدام extends
- المجموعات العامة عمليًا