Option وNullable: متى تستخدم كلًّا منهما
قارن بين نوع Option في Arrow وأنواع Kotlin القابلة للقيمة الفارغة، واختر النوع المناسب
Option وNullable: متى تستخدم كلًّا منهما درس مجاني في Kotlin Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kotlin Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
طريقتان لتمثيل عدم وجود القيمة
الأنواع Nullable في Kotlin
يُعد T? في Kotlin الخيار الاصطلاحي لتمثيل عدم وجود القيمة في معظم شيفرات Kotlin. يفرض المترجم إجراء فحوصات null، ويسمح عامل الاستدعاء الآمن ?. بتسلسل الاستدعاءات بسلاسة، بينما يوفر ?: "default" قيمًا بديلة بإيجاز:
val name: String? = findUser(id)?.name
val display = name ?: "Anonymous"Option<A> في Arrow
يغلف Option مفهوم القيمة القابلة لأن تكون null داخل نوع جبري فعلي يضم map وflatMap وfilter وfold وغيرها. ويتكامل طبيعيًا مع أسلوب مسارات المعالجة الوظيفية في Arrow:
import arrow.core.Option
import arrow.core.Some
import arrow.core.None
import arrow.core.toOption
val opt: Option<String> = "hello".toOption() // Some("hello")
val absent: Option<String> = Noneالتحويل بين Option والقيم Nullable
يمكنك التحويل بحرية: يغلّف value?.toOption() قيمةً nullable داخل Option؛ وتستخرج option.getOrNull() القيمة أو null؛ بينما يوفر option.getOrElse { default } قيمة بديلة:
val opt: Option<String> = nullableString.toOption()
val back: String? = opt.getOrNull()map وflatMap على Option
تحوّل map { } قيمة Some، وتُبقي None من دون تغيير. أما flatMap { } فتُسلسل العمليات التي تُعيد بدورها Option:
val length: Option<Int> = "hello".toOption().map { it.length } // Some(5)
val noneLength: Option<Int> = (null as String?).toOption().map { it.length } // Nonefilter على Option
تحوّل filter { predicate } قيمة Some إلى None إذا كان الشرط خاطئًا:
val positiveAge: Option<Int> = 25.toOption().filter { it > 0 } // Some(25)
val rejectedAge: Option<Int> = (-1).toOption().filter { it > 0 } // Nonefold: استهلاك Option
تعالج fold(ifEmpty, ifSome) كلتا الحالتين في تعبير واحد من دون مطابقة الأنماط:
val result: String = someOption.fold(
ifEmpty = { "Nothing here" },
ifSome = { value -> "Got: $value" }
)متى تفضّل Nullable T؟
فضّل النوع nullable في Kotlin (T?) عندما:
- تكتب شيفرة Kotlin اصطلاحية سيقرأها مطورون آخرون
- تحتاج إلى تسلسل عوامل آمنة مع null (
?.و?:) - يُستخدم النوع في واجهات برمجة لا تعتمد على Arrow
- يكون الأداء بالغ الأهمية، إذ لا توجد كلفة إضافية لتغليف القيم
متى تفضّل Option<A>؟
فضّل Option عندما:
- تستخدم بالفعل مسار المعالجة الوظيفية في Arrow (
mapوflatMap) - تريد تركيب القيم الاختيارية مع
EitherأوRaise - تريد جعل عدم وجود القيمة واضحًا في سياق وظيفي عام
- تنشئ مكتبة قد لا يستخدم مستدعوها Kotlin
Option داخل either { }
داخل كتلة either { } في Arrow، يمكنك استدعاء .bind() على قيمة Option بعد تحويلها أولًا إلى Either:
fun findUserOpt(id: Long): Option<User> = TODO()
fun getUser(id: Long): Either<UserError, User> = either {
findUserOpt(id)
.toEither { UserError.NotFound }
.bind()
}النمط المضاد لاستخدام Option
لا تستخدم Option في كل مكان لمجرد أنه موجود. في Kotlin، يكون String? أوضح من Option في معظم شفرات التطبيقات. احتفظ باستخدام Option للحالات التي تضيف فيها معاملاته الوظيفية قيمة حقيقية.
اختبار سريع
ماذا تُرجع None.map { it.length } في Option لدى Arrow؟
مراجعة: Option والقيم القابلة لـ null
أهم النقاط:
تعلم Kotlin مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «Option وNullable: متى تستخدم كلًّا منهما» مجاني؟
نعم — نص درس «Option وNullable: متى تستخدم كلًّا منهما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kotlin Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Kotlin Academy 4 دروس في المجموع.
ماذا ستتعلم في «Option وNullable: متى تستخدم كلًّا منهما»؟
قارن بين نوع Option في Arrow وأنواع Kotlin القابلة للقيمة الفارغة، واختر النوع المناسب تتمرن على Kotlin Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Kotlin Academy؟
لا تُشترط خبرة سابقة. Kotlin Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Option وNullable: متى تستخدم كلًّا منهما»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Kotlin Academy هذا؟
نعم. كل درس في Kotlin Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Either : معالجة الأخطاء ذات الأنواع من دون استثناءات
- Arrow Raise DSL: تركيب الأخطاء المعرّفة بالأنواع
- Option وNullable: متى تستخدم كلًّا منهما
- نمذجة المجالات الوظيفية باستخدام الأنواع الأساسية في Arrow