voidmain() {try {print("أقوم بتقسيم رقم...");int res =10~/0;print(res); } catch (e) {print("حدث خطأ"); } finally {print("تم تنفيذ finally"); }}
Dart
✅ الناتج:
أقوم بتقسيم رقم...حدث خطأتم تنفيذ finally
Dart
✅ متى نستخدم finally؟
لغلق ملف، إيقاف مؤقت، تحرير موارد، إلخ.
🧩 خامساً: throw — لرمي خطأ يدويًا
voiddivide(int x, int y) {if (y ==0) {throwException("لا يمكن القسمة على صفر!"); } else {print(x / y); }}voidmain() {try {divide(10, 0); } catch (e) {print("خطأ: $e"); }}
Dart
🧠 استخدام عملي متقدم:
✅ مثال: تحقق من عمر مستخدم
voidcheckAge(int age) {if (age <18) {throwFormatException("العمر يجب أن يكون 18 أو أكثر."); }print("مرحبًا بك!");}voidmain() {try {checkAge(15); } onFormatExceptioncatch (e) {print("خطأ في التنسيق: ${e.message}"); } finally {print("التحقق من العمر انتهى."); }}
Dart
✅ ملخص الفرق بين الكلمات:
الكلمة
الوظيفة
هل مطلوبة؟
try
يحاول تنفيذ كود فيه خطأ محتمل
✅ دائمًا مع catch/on
catch
يلتقط أي خطأ ويعطي تفاصيله
اختياري (إما catch أو on)
on
يعالج نوع خطأ معين
اختياري
finally
ينفذ في جميع الحالات
اختياري
throw
لرمي استثناء يدويًا
اختياري (لكن مهم أحيانًا)
🎯 ممارسات جيدة:
لا تترك catch فارغًا — دائمًا اعرض أو سجل الخطأ.
لا تستخدم throw بدون داعٍ — فقط إذا كنت بحاجة لرمي خطأ منطقي.
استخدم finally عند التعامل مع الملفات، قواعد البيانات، إلخ.
حدد نوع الخطأ في on كلما أمكن — لتفادي التقاط أخطاء غير متوقعة.