0Pricing
Kotlin Academy · درس

نوع Result

مثّلوا النجاح والفشل

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

نجاح أم فشل

قد تفشل عمليات كثيرة. يمثّل نوع Result في Kotlin نتيجةً تكون إما نجاحًا يحتوي على قيمة أو فشلًا يحتوي على استثناء، وذلك من دون إلقاء الاستثناء.

إنشاء نجاح

غلّف قيمةً في نتيجة ناجحة باستخدام Result.success(value).

fun main() {
    val r: Result<Int> = Result.success(42)
    println(r.isSuccess)
    println(r.getOrNull())
}

إنشاء فشل

مثّل خطأً باستخدام Result.failure(exception). لا يُلقى أي استثناء حتى تختار فك تغليفه.

fun main() {
    val r: Result<Int> = Result.failure(IllegalStateException("bad"))
    println(r.isFailure)
    println(r.exceptionOrNull()?.message)
}

getOrNull و exceptionOrNull

افحص النتيجة بأمان: تعيد getOrNull() القيمة أو null، وتعيد exceptionOrNull() الخطأ أو null.

fun main() {
    val ok = Result.success("hi")
    val bad = Result.failure<String>(RuntimeException("oops"))
    println(ok.getOrNull())
    println(bad.exceptionOrNull()?.message)
}

getOrDefault

وفّر قيمة بديلة لحالات الفشل باستخدام getOrDefault. يكون ذلك أنظف من فحوصات null عندما يتوفر لديك افتراضي مناسب.

fun main() {
    val bad: Result<Int> = Result.failure(Exception())
    println(bad.getOrDefault(0))
    val ok: Result<Int> = Result.success(7)
    println(ok.getOrDefault(0))
}

getOrElse

تحسب getOrElse القيمة البديلة انطلاقًا من الاستثناء، مما يتيح لك الاستجابة بصورة مختلفة للأخطاء المختلفة.

fun main() {
    val r: Result<Int> = Result.failure(IllegalArgumentException("nope"))
    val value = r.getOrElse { e -> if (e is IllegalArgumentException) -1 else -2 }
    println(value)
}

getOrThrow

عندما تحتاج إلى الاستثناء، تعيد getOrThrow() القيمة أو تعيد إلقاء الاستثناء المخزّن.

fun main() {
    val ok = Result.success(10)
    println(ok.getOrThrow())

    try {
        Result.failure<Int>(IllegalStateException("fail")).getOrThrow()
    } catch (e: Exception) {
        println("caught: " + e.message)
    }
}

إرجاع Result

يمكن للدالة إرجاع Result لجعل الفشل صريحًا في توقيعها، وإلزام المستدعين بمعالجة النتيجتين.

fun parse(s: String): Result<Int> {
    val n = s.toIntOrNull()
    return if (n != null) Result.success(n)
           else Result.failure(NumberFormatException(s))
}

fun main() {
    println(parse("123").getOrNull())
    println(parse("x").exceptionOrNull()?.message)
}

Result مقارنةً بالاستثناءات

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

متى تستخدم Result

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

قيمة لا قفزة

التحول الأساسي هو أن الخطأ يصبح قيمة إرجاع عادية. ستتعلم بعد ذلك runCatching، الذي يلتقط الاستثناءات المُلقاة في Result تلقائيًا.

تحقق سريع

اختبر فهمك لنوع Result.

مراجعة

تعلمت نوع Result:

  • إنشاؤه باستخدام Result.success / Result.failure
  • فحصه باستخدام getOrNull وexceptionOrNull
  • الاسترداد باستخدام getOrDefault وgetOrElse وgetOrThrow
  • إرجاعه لجعل الفشل صريحًا

التالي: runCatching.

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

هل درس «نوع Result» مجاني؟

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

ماذا ستتعلم في «نوع Result»؟

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

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

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

كم من الوقت يستغرق درس «نوع Result»؟

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

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

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

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

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