Dart Academy · درس

فئات sealed وعبارة switch الشاملة

إغلاق تسلسل هرمي يمكن للمصرّف التحقق منه

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

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

عائلة مغلقة

يحدد الصنف sealed مجموعة ثابتة من الأنواع الفرعية. ولا يمكن لأي كود خارج ملفه إضافة نوع جديد، لذا تكون العائلة معروفة بالكامل.

sealed class Shape {}

التصريح بالأنواع الفرعية

توجد الأصناف الفرعية لنوع sealed في الملف نفسه. وتشكل معًا كل variant محتمل يجب على المصرّف أخذه في الحسبان.

class Circle extends Shape {}
class Square extends Shape {}

لا يمكن إنشاء مثيل مباشرةً

الصنف sealed مجرد ضمنيًا، لذلك لا تنشئون مثيلًا منه مباشرةً. بل تنشئون دائمًا واحدًا من أنواعه الفرعية المعروفة.

var s = Shape(); // error
var s = Circle(); // ok

فوائد sealed

بما أن الأنواع الفرعية شاملة، يعرف Dart القائمة الكاملة. وهذا يتيح لـ switch التحقق من معالجة كل حالة على حدة.

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

يمكن لـswitch على قيمة sealed مطابقة كل نوع فرعي باستخدام نمط. ويرى كل فرع النوع الدقيق الذي طابقه.

switch (shape) {
  case Circle(): print('round');
  case Square(): print('boxy');
}

التحقق من الشمولية

إذا نسيتم نوعًا فرعيًا، فسيُبلغ المصرّف عن خطأ. ولا يمكن إسقاط حالة بصمت من switch من نوع sealed.

لا حاجة إلى default

بما أن كل الحالات مغطاة، فلستم بحاجة إلى فرع default. فإضافته لا تؤدي إلا إلى إخفاء الحالات المفقودة مستقبلًا.

استخدام switch كتعبير

استخدموا switch كتعبير لحساب قيمة مباشرةً. وتظل الشمولية مطبقة، لذا يعيد كل فرع قيمة.

final name = switch (shape) {
  Circle() => 'circle',
  Square() => 'square',
};

إضافة variant جديد

أضيفوا نوعًا فرعيًا جديدًا لاحقًا، وستظهر باللون الأحمر كل عبارة switch لا تعالجه. وسيوجّهكم المصرّف إلى تحديث كل واحدة منها.

class Triangle extends Shape {}
// existing switches now error

sealed مقابل abstract

يسمح الصنف abstract بوجود أنواع فرعية خارجية غير معروفة، لذلك لا يمكن لعبارات switch أن تكون شاملة. أما sealed فيغلق المجموعة لإجراء تحقق كامل.

ممتاز لتمثيل الحالة

تتألق الأنواع sealed عند نمذجة حالات التطبيق مثل Loading وSuccess وError. وعندها يُضمن وجود فرع لكل حالة في واجهة المستخدم. ✅

sealed class Result {}
class Loading extends Result {}
class Done extends Result {}

تحقق سريع

تحقق سريع من شمولية sealed.

مراجعة

رأيتم أن الأصناف sealed تغلق عائلة النوع وتجعل كل switch شاملة، لذا تتحول الحالات المفقودة إلى أخطاء وقت الترجمة. 🎯

البدء مجانًا

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

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

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

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

هل درس «فئات sealed وعبارة switch الشاملة» مجاني؟

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

ماذا ستتعلم في «فئات sealed وعبارة switch الشاملة»؟

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

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

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

كم من الوقت يستغرق درس «فئات sealed وعبارة switch الشاملة»؟

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

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

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

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

  1. الحقول النهائية وعدم القابلية العميقة للتغيير
  2. فئات sealed وعبارة switch الشاملة
  3. معدّلات base وinterface وfinal
  4. ‏copyWith والمساواة حسب القيمة
← العودة إلى Dart Academy