تخطَّ إلى المحتوى

try / catch / finally

معالجة الاستثناءات try / catch / finally

try/catch/finally في Kotlin تعمل كتعبير يُرجع قيمة، وكل الاستثناءات غير مفحوصة (unchecked) بلا حاجة لإعلان throws.

على عكس Java، تعتبر Kotlin كل الاستثناءات unchecked — لا حاجة لكتابة throws أو إجبار المستدعي على التعامل معها. try تُستخدم كتعبير: قيمتها هي آخر سطر في كتلة try إن نجحت، أو في كتلة catch المطابقة إن فشلت (finally لا تؤثر على القيمة المُرجَعة). require() وcheck() اختصاران جاهزان يرميان IllegalArgumentException وIllegalStateException على التوالي عند فشل شرط.

الصياغة

val نتيجة = try {
    // كود قد يرمي استثناءً
} catch (e: نوعالاستثناء) {
    // معالجة
} finally {
    // ينفّذ دائمًا (اختياري)
}

📄 مثال

fun parseAge(input: String): Int {
    return try {
        input.trim().toInt()
    } catch (e: NumberFormatException) {
        println("إدخال غير صالح: $input")
        -1
    } finally {
        println("انتهت محاولة التحويل")
    }
}

class InvalidAgeException(msg: String) : Exception(msg)

fun validate(age: Int) {
    require(age in 0..120) { "عمر غير منطقي: $age" }
}

أهم النقاط

العنصرالوظيفة
try { }الكتلة التي قد ترمي استثناءً
catch (e: النوع) { }تلتقط استثناءً من نوع معيّن — رتّبها من الأخص للأعم
finally { }تنفّذ دائمًا، نجحت العملية أم فشلت
require / checkاختصارات لرمي IllegalArgumentException / IllegalStateException

💡 نصائح عملية

  • استغل try كتعبير لإسناد قيمة افتراضية مباشرة عند الفشل بدل متغيّر var مؤقت
  • عرّف استثناءً مخصّصًا بوراثة Exception عندما تحتاج التمييز بين أنواع أخطاء مختلفة في نفس التطبيق

⚠️ أخطاء شائعة

  • الاعتماد على finally لإرجاع قيمة — finally لا يؤثر على قيمة تعبير try المُرجَعة
  • التقاط Exception العام أولًا قبل الأنواع الأكثر تحديدًا — الكتلة الأخص تصبح ميتة (unreachable) أو تحذيرًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار KOTLIN الكامل بالعربي.