0Pricing
Dart Academy · درس

الاستثناءات المخصصة وrethrow

عرّف أخطاء ذات معنى وأعد رميها

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

أخطاء تعبّر عن معناها

تخفي الاستثناءات العامة الغرض منها. أما custom exception فيسمّي المشكلة الدقيقة، مما يجعل حالات الفشل واضحة في تطبيقكم بالكامل. 🏷️

تنفيذ Exception

أنشئوا فئة implements Exception. فهذا يحددها كنوع خطأ قابل للرمي، ويتعرف إليه Dart والقرّاء فورًا.

class PaymentException implements Exception {}

إرفاق رسالة

أضيفوا حقل message إلى الاستثناء من خلال المُنشئ، حتى تتمكن معالجات الأخطاء من معرفة سبب حدوثه.

class PaymentException implements Exception {
  final String message;
  PaymentException(this.message);
}

دالة toString ودودة

أعيدوا تعريف toString حتى تعرض طباعة الاستثناء جملة واضحة بدلًا من اسم الفئة فقط.

@override
String toString() => 'PaymentException: $message';

رمي استثناء خاص بكم

ارموا استثناءً مخصصًا بالطريقة نفسها التي ترمون بها استثناءً مدمجًا. استخدموا throw مع نسخة جديدة عند انتهاك إحدى القواعد.

throw PaymentException('Card declined');

الالتقاط حسب نوعكم

التقطوا استثناءكم باستخدام عبارة on، تمامًا كما تفعلون مع الأنواع المدمجة، لمعالجة هذه الحالة تحديدًا.

try {
  pay();
} on PaymentException catch (e) {
  print(e);
}

أحيانًا لا يمكنكم إصلاحه

قد تسجل إحدى المعالجات الخطأ، لكنها لا تتمكن من حلّه. وبدلًا من تجاهله، يمكنكم تمريره إلى المستوى التالي باستخدام rethrow.

الكلمة المفتاحية rethrow

تعيد rethrow رمي الاستثناء الحالي، مع الحفاظ على تتبع مكدس الاستدعاءات الأصلي حتى يرى المستدعي موضع بدايته الحقيقي.

catch (e) {
  log(e);
  rethrow;
}

rethrow أفضل من throw e

تؤدي كتابة throw e إلى إعادة ضبط تتبع مكدس الاستدعاءات، بينما تحافظ rethrow عليه كما هو. استخدموا rethrow دائمًا عند إعادة الرمي داخل catch.

سجّلوا الخطأ ثم مرروه للأعلى

من الأنماط الشائعة: استخدام catch من أجل log الفشل، ثم rethrow لكي يقرر مستوى أعلى كيفية التعافي.

catch (e) {
  logger.error(e);
  rethrow;
}

إضافة حقول مفيدة

يمكن للاستثناءات المخصصة الاحتفاظ ببيانات إضافية مثل code أو القيمة التي فشلت، مما يمنح المعالجات سياقًا أوسع للتصرف.

class ApiException implements Exception {
  final int code;
  ApiException(this.code);
}

تحقق سريع

لماذا نستخدم rethrow بدلًا من throw e داخل catch؟

مراجعة

أصبحتم الآن قادرين على إنشاء استثناءات واضحة تطبق Exception وتحمل بيانات، واستخدام rethrow لتمرير حالات الفشل إلى المستويات الأعلى بسلاسة. 🚀

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

هل درس «الاستثناءات المخصصة وrethrow» مجاني؟

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

ماذا ستتعلم في «الاستثناءات المخصصة وrethrow»؟

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

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

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

كم من الوقت يستغرق درس «الاستثناءات المخصصة وrethrow»؟

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

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

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

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

  1. throw وtry وcatch
  2. عبارات on وأنواع الاستثناءات
  3. finally والتنظيف المضمون
  4. الاستثناءات المخصصة وrethrow
← العودة إلى Dart Academy