Kotlin Academy · درس

‏try/catch/finally كتعبير

استخدم try-catch كتعبير لإعادة قيم من الشيفرة المعرّضة للأخطاء.

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

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

try تعبير

في Kotlin، تُعد try/catch تعبيرًا يُرجع قيمة. ويكون آخر تعبير في كتلة try أو catch هو النتيجة.

try/catch الأساسي

ضع الشيفرة التي قد تطلق استثناءً داخل كتلة try، وتعامل مع الاستثناءات في catch.

fun main() {
    try {
        val n = "abc".toInt()
        println(n)
    } catch (e: NumberFormatException) {
        println("Not a number: ${e.message}")
    }
}

يعيد try قيمة

يمكنك إسناد نتيجة try/catch إلى متغير. وتكون القيمة هي ما تُرجعه الكتلة المطابقة.

fun main() {
    val n: Int = try {
        "42".toInt()
    } catch (e: NumberFormatException) {
        -1
    }
    println(n) // 42
}

try في جسم الدالة

يمكنك استخدام try بوصفه جسم دالة ذات جسم تعبيري.

fun parseOrDefault(s: String, default: Int): Int = try {
    s.toInt()
} catch (e: NumberFormatException) {
    default
}
fun main() {
    println(parseOrDefault("42", 0))   // 42
    println(parseOrDefault("abc", 0))  // 0
}

عبارات catch متعددة

أدرج عدة عبارات catch لأنواع الاستثناءات المختلفة. وتفوز المطابقة الأولى.

fun main() {
    val result: String = try {
        val list = listOf(1)
        list[5].toString()
    } catch (e: IndexOutOfBoundsException) {
        "index out of bounds"
    } catch (e: Exception) {
        "other error"
    }
    println(result)
}

كتلة finally

تُنفَّذ finally دائمًا، وتُستخدم لتنظيف الموارد. ولا تؤثر في قيمة الإرجاع لتعبير try.

fun main() {
    val n: Int = try {
        "42".toInt()
    } catch (e: NumberFormatException) {
        -1
    } finally {
        println("cleanup runs")
    }
    println("value = $n")
}

try مع عبارات متعددة

استخدم كتلة تحتوي على عدة عبارات، وتكون القيمة هي آخر تعبير.

fun main() {
    val result: String = try {
        val n = 10 / 2
        val s = "Result is $n"
        s.uppercase()
    } catch (e: Exception) {
        "ERROR"
    }
    println(result) // RESULT IS 5
}

التقاط أنواع متعددة

لا تدعم Kotlin صياغة multi-catch في Java (catch (A | B)). استخدم نوعًا فائقًا مشتركًا أو عبارات catch منفصلة.

fun parse(s: String): Int = try {
    s.toInt()
} catch (e: RuntimeException) { // covers NumberFormatException etc.
    -1
}
fun main() {
    println(parse("42"))
    println(parse("nope"))
}

ترتيب catch مهم

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

fun main() {
    try {
        throw NumberFormatException("oops")
    } catch (e: NumberFormatException) {
        println("specific: ${e.message}")
    } catch (e: Exception) {
        println("generic")
    }
}

الإرجاع من try

يمكنك الإرجاع مبكرًا من داخل try، وستظل كتلة finally تُنفَّذ.

fun process(x: Int): String {
    return try {
        require(x > 0) { "must be positive" }
        "ok: $x"
    } catch (e: IllegalArgumentException) {
        "error: ${e.message}"
    } finally {
        println("processing done")
    }
}
fun main() {
    println(process(5))
    println(process(-1))
}

نمط مضاد: catch فارغة

تخفي كتل catch الفارغة الأخطاء. احرص على الأقل على تسجيل الاستثناء أو إعادة إطلاقه.

fun main() {
    try {
        "abc".toInt()
    } catch (e: NumberFormatException) {
        // BAD: silently swallow
    }
    println("continued")
}

تحقق سريع

إلى ماذا يُقيَّم تعبير try/catch في Kotlin؟

مراجعة

تُعد try/catch تعبيرًا يُرجع قيمة. أدرج الاستثناءات المحددة قبل أنواعها الفائقة، واستخدم finally لتنظيف الموارد، وتجنب كتل catch الفارغة. استخدمها بوصفها جسم دالة أو لإسناد قيمة افتراضية عند حدوث خطأ.

البدء مجانًا

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

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

الدورات
51
الدروس
203

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

هل درس «‏try/catch/finally كتعبير» مجاني؟

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

ماذا ستتعلم في «‏try/catch/finally كتعبير»؟

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

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

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

كم من الوقت يستغرق درس «‏try/catch/finally كتعبير»؟

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

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

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

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

  1. ‏try/catch/finally كتعبير
  2. إنشاء أصناف Exception مخصصة
  3. ‏runCatching وResult
  4. إعادة رمي الاستثناءات وتسلسلها
← العودة إلى Kotlin Academy