0Pricing
Kotlin Academy · درس

معالجة الأخطاء الوظيفية

استخدموا Map وrecover

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

الأخطاء كتدفقات بيانات

تتعامل معالجة الأخطاء الوظيفية مع حالات الفشل باعتبارها قيمًا يمكنك تحويلها وتسلسلها والاسترداد منها — تمامًا كما تحوّل القيم الناجحة. ويوفر Result المدمج عوامل تشغيل لهذا الغرض تحديدًا.

map

يحوّل map القيمة الناجحة ويترك حالة الفشل دون تغيير، ويمررها كما هي.

fun main() {
    val r = Result.success(5).map { it * 2 }
    println(r.getOrNull())
    val f = Result.failure<Int>(Exception("x")).map { it * 2 }
    println(f.getOrNull())
}

mapCatching

إذا كان التحويل نفسه قد يلقي استثناءً، يلتقط mapCatching ذلك الاستثناء في النتيجة بدلًا من السماح له بالخروج.

fun main() {
    val r = Result.success("10").mapCatching { it.toInt() }
    println(r.getOrNull())
    val bad = Result.success("oops").mapCatching { it.toInt() }
    println(bad.isFailure)
}

recover

يحوّل recover حالة الفشل إلى نجاح من خلال حساب قيمة انطلاقًا من الاستثناء. وتمر حالة النجاح دون تغيير.

fun main() {
    val r = Result.failure<Int>(Exception("down")).recover { 0 }
    println(r.getOrNull())
    val ok = Result.success(7).recover { 0 }
    println(ok.getOrNull())
}

recoverCatching

عندما تكون منطقية الاسترداد معرضة للفشل أيضًا، يغلّف recoverCatching تلك المحاولة، ويحافظ على كل شيء باعتباره نتيجة.

fun main() {
    val r = Result.failure<Int>(Exception()).recoverCatching {
        "5".toInt()
    }
    println(r.getOrNull())
}

onSuccess و onFailure

تنفّذ هذه الدوال تأثيرات جانبية من دون تغيير النتيجة، ثم تعيدها لمواصلة السلسلة. وهي مناسبة جدًا للتسجيل.

fun main() {
    runCatching { "3".toInt() }
        .onSuccess { println("ok " + it) }
        .onFailure { println("fail " + it.message) }
        .also { println("done") }
}

إنشاء سلسلة معالجة

تتراكب العوامل لتشكّل سلسلة معالجة واضحة: التقاط وتحويل واسترداد، وكل ذلك من دون تداخل try/catch.

fun main() {
    val result = runCatching { "21".toInt() }
        .map { it * 2 }
        .recover { -1 }
        .getOrThrow()
    println(result)
}

استخدام fold للوصول إلى قيمة نهائية

أنهوا سلسلة المعالجة باستخدام fold لدمج الفرعين في قيمة ملموسة واحدة، مثل رسالة موجّهة إلى المستخدم.

fun main() {
    val msg = runCatching { "x".toInt() }
        .map { it + 1 }
        .fold(
            onSuccess = { "result: " + it },
            onFailure = { "failed: " + it.message }
        )
    println(msg)
}

تطبيق map على نوع مخصّص

يمكنكم منح نوع النتيجة sealed الخاص بكم سهولة الاستخدام نفسها من خلال كتابة دوال امتداد مثل map.

sealed class Res<out T> {
    data class Ok<T>(val v: T) : Res<T>()
    data class Err(val msg: String) : Res<Nothing>()
}

fun <T, R> Res<T>.map(f: (T) -> R): Res<R> = when (this) {
    is Res.Ok -> Res.Ok(f(v))
    is Res.Err -> this
}

fun main() {
    val r = Res.Ok(4).map { it * 3 }
    println(r)
}

لماذا الأسلوب الوظيفي

تحافظ معالجة الأخطاء الوظيفية على وضوح المسار الأساسي، بينما تتدفق الأخطاء بطريقة تصريحية. فلا يوجد تكرار مت散ر لـ try/catch، كما يتتبّع نظام الأنواع حالات الفشل من البداية إلى النهاية.

جمع كل الأجزاء

أصبح لديكم الآن مجموعة أدوات متكاملة:

  • map / mapCatching للتحويل
  • recover / recoverCatching للاسترداد
  • onSuccess / onFailure للتأثيرات الجانبية
  • fold لإنهاء السلسلة

تحقّق سريع

اختبروا فهمكم لمعالجة الأخطاء الوظيفية.

مراجعة

تعلّمتم معالجة الأخطاء الوظيفية:

  • التحويل باستخدام map / mapCatching
  • الاسترداد باستخدام recover / recoverCatching
  • المراقبة باستخدام onSuccess / onFailure
  • الإنهاء باستخدام fold

وبهذا تكتمل دورة Result ونمذجة الأخطاء.

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

هل درس «معالجة الأخطاء الوظيفية» مجاني؟

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

ماذا ستتعلم في «معالجة الأخطاء الوظيفية»؟

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

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

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

كم من الوقت يستغرق درس «معالجة الأخطاء الوظيفية»؟

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

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

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

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

  1. نوع Result
  2. runCatching
  3. تسلسلات Result المختومة
  4. معالجة الأخطاء الوظيفية
← العودة إلى Kotlin Academy