🔹 التعامل مع الأخطاء (Exception Handling) في Dart 🚀
في Dart، يمكن أن تحدث الأخطاء (Exceptions
) أثناء تشغيل البرنامج، مما قد يؤدي إلى توقفه بشكل غير متوقع.
لذلك، توفر Dart آلية للتعامل مع هذه الأخطاء باستخدام الكلمات المفتاحية:
✅ try
→ لتجربة تنفيذ الكود.
✅ catch
→ لالتقاط الأخطاء عند حدوثها.
✅ on
→ لمعالجة نوع معين من الأخطاء فقط.
✅ finally
→ لتنفيذ كود بغض النظر عن حدوث خطأ أو لا.
✅ throw
→ لرمي (throw
) استثناء يدويًا.
🔹 try - catch
تستخدم try - catch
لتجنب توقف البرنامج عند حدوث خطأ.
📌 مثال: try - catch
للتعامل مع القسمة على صفر
dartنسختحرير<code>void main() {
try {
int result = 10 ~/ 0; // ❌ خطأ: القسمة على صفر
print(result);
} catch (e) {
print("حدث خطأ: $e"); // ✅ معالجة الخطأ
}
}
</code>
Dart🔹 التفسير:
try
تحاول تنفيذ10 ~/ 0
، ولكن القسمة على صفر تسبب خطأ (IntegerDivisionByZeroException
).catch (e)
تلتقط الخطأ وتمنع توقف البرنامج.
✅ الناتج:
نسختحرير<code>حدث خطأ: IntegerDivisionByZeroException
</code>
Dart🔹 try - on - catch
🔹 on
يستخدم لمعالجة نوع معين من الأخطاء.
🔹 catch
يستخدم لالتقاط أي خطأ غير محدد.
📌 مثال: on
لمعالجة خطأ محدد
dartنسختحرير<code>void main() {
try {
int result = 10 ~/ 0;
print(result);
} on IntegerDivisionByZeroException {
print("❌ خطأ: لا يمكنك القسمة على صفر");
} catch (e) {
print("⚠️ خطأ غير معروف: $e");
}
}
</code>
Dart🔹 التفسير:
on IntegerDivisionByZeroException
يعالج خطأ القسمة على صفر.catch (e)
تلتقط أي خطأ آخر غير محدد.
✅ الناتج:
نسختحرير❌ خطأ: لا يمكنك القسمة على صفر
🔹 try - catch - finally
🔹 finally
يستخدم لتنفيذ كود سواء حدث خطأ أم لا.
📌 مثال: finally
دائمًا يُنفذ
dartنسختحرير<code>void main() {
try {
int result = 10 ~/ 2;
print("النتيجة: $result");
} catch (e) {
print("حدث خطأ: $e");
} finally {
print("✅ هذا الكود يُنفذ دائمًا سواء حدث خطأ أم لا");
}
}
</code>
Dart✅ الناتج:
makefileنسختحرير<code>النتيجة: 5
✅ هذا الكود يُنفذ دائمًا سواء حدث خطأ أم لا
</code>
Dart🔹 throw
لرمي استثناءات مخصصة
🔹 يمكننا استخدام throw
لإنشاء أخطاء مخصصة (Custom Exceptions
).
📌 مثال: رمي خطأ مخصص
dartنسختحرير<code>void checkAge(int age) {
if (age < 18) {
throw Exception("❌ لا يمكنك التسجيل، العمر يجب أن يكون 18 أو أكثر");
} else {
print("✅ مرحبًا بك! يمكنك التسجيل.");
}
}
void main() {
try {
checkAge(16); // ❌ سيرمي خطأ
} catch (e) {
print("حدث خطأ: $e");
}
}
</code>
Dart✅ الناتج:
phpنسختحريرحدث خطأ: Exception: ❌ لا يمكنك التسجيل، العمر يجب أن يكون 18 أو أكثر
🔹 إنشاء استثناء مخصص (Custom Exception
)
يمكنك إنشاء كلاسات (Classes
) مخصصة لرمي أخطاء محددة.
📌 مثال: استثناء مخصص
dartنسختحرير<code>class AgeException implements Exception {
String errorMessage() => "❌ العمر غير صالح!";
}
void checkAge(int age) {
if (age < 18) {
throw AgeException();
} else {
print("✅ مرحبًا بك!");
}
}
void main() {
try {
checkAge(15); // ❌ سيرمي استثناء مخصص
} catch (e) {
print(e.errorMessage()); // ✅ طباعة رسالة الخطأ
}
}
</code>
Dart✅ الناتج:
نسختحرير❌ العمر غير صالح!
🎯 خلاصة Exception Handling في Dart
✅ try
→ يحاول تنفيذ الكود.
✅ catch (e)
→ يلتقط أي خطأ ويمنع توقف البرنامج.
✅ on
→ يعالج نوع معين من الأخطاء فقط.
✅ finally
→ يتم تشغيله دائمًا سواء حدث خطأ أم لا.
✅ throw
→ يستخدم لرمي خطأ يدويًا.
✅ Custom Exception
→ يمكن إنشاء استثناءات مخصصة (Classes
).