runCatching
التقطوا الاستثناءات كقيم
runCatching درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
التقاط الاستثناءات
تشغّل runCatching كتلةً وتغلّف نتيجتها في Result: تصبح قيمة الإرجاع نجاحًا، ويصبح أي استثناء مُلقى فشلًا. ولا حاجة إلى try/catch.
الاستخدام الأساسي
مرّر دالة lambda؛ ويكون التعبير الأخير هو قيمة النجاح.
fun main() {
val r = runCatching { 10 / 2 }
println(r.isSuccess)
println(r.getOrNull())
}التقاط خطأ مُلقى
عندما تلقي الكتلة استثناءً، تخزّن runCatching الاستثناء بدلًا من تمريره إلى الخارج.
fun main() {
val r = runCatching { 10 / 0 }
println(r.isFailure)
println(r.exceptionOrNull()?.message)
}تغليف التحليل المعرّض للفشل
من الاستخدامات الشائعة تغليف الاستدعاءات التي قد تلقي استثناءً، مثل التحليل، بحيث يصبح الفشل قيمة يمكنك معالجتها.
fun main() {
val good = runCatching { "42".toInt() }
val bad = runCatching { "abc".toInt() }
println(good.getOrNull())
println(bad.getOrNull())
}runCatching كمستقبِل
يمكنك استدعاء runCatching على كائن مستقبِل؛ وداخل الكتلة يشير this إليه. ويفيد ذلك في تسلسل العمليات على قيمة.
fun main() {
val text = " 99 "
val r = text.runCatching { trim().toInt() }
println(r.getOrNull())
}الاسترداد ضمنيًا
ادمجه مع getOrElse لتوفير قيمة بديلة مباشرةً في موضع الاستدعاء.
fun main() {
val n = runCatching { "oops".toInt() }.getOrElse { -1 }
println(n)
}fold للفرعين
تعالج fold النجاح والفشل في استدعاء واحد، وتعيد قيمة واحدة من أيٍّ من الفرعين.
fun main() {
val message = runCatching { "50".toInt() }.fold(
onSuccess = { "got " + it },
onFailure = { "error: " + it.message }
)
println(message)
}إعادة هيكلة try/catch
في المواضع التي قد تكتب فيها try/catch لإرجاع قيمة، يكون runCatching أكثر إيجازًا ويحافظ على النتيجة باعتبارها بيانات.
fun safeDivide(a: Int, b: Int): Result<Int> =
runCatching { a / b }
fun main() {
println(safeDivide(8, 2).getOrNull())
println(safeDivide(8, 0).exceptionOrNull()?.message)
}احذر من الالتقاط الواسع
يلتقط runCatching جميع Throwables، بما في ذلك ما قد لا ترغب في ابتلاعه. تجنب تغليف كتل ضخمة؛ واجعل المنطقة الملتقطة صغيرة ومقصودة.
تسلسل التحويلات
بما أن runCatching ينتج Result، يمكنك مباشرةً تسلسل map أو recover عليه. سنستكشف ذلك في الدرس التالي.
fun main() {
val r = runCatching { "7".toInt() }.map { it * 10 }
println(r.getOrNull())
}لماذا يفيد ذلك
يربط runCatching بين الشيفرة التي تلقي الاستثناءات وعالم Result القائم على القيم. ويتيح لك اعتماد معالجة الأخطاء الوظيفية حتى عند استدعاء واجهات برمجية تلقي استثناءات.
تحقق سريع
اختبر فهمك لـ runCatching.
مراجعة
تعلمت runCatching:
- يغلّف نتيجة الكتلة في
Result - يحوّل الاستثناءات المُلقاة إلى حالات فشل
- يُدمج مع
getOrElseوfold - يحافظ على صغر المناطق الملتقطة
التالي: إنشاء تسلسلات هرمية مختومة للنتائج.
الأسئلة الشائعة
هل درس «runCatching» مجاني؟
نعم — نص درس «runCatching» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «runCatching»؟
التقطوا الاستثناءات كقيم تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «runCatching»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.