أساسيات Coroutine ونطاقاتها
شغّل coroutines ضمن النطاق المناسب
أساسيات Coroutine ونطاقاتها درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 4 دروس في المجموع.
ما هي Coroutines؟
تتيح لك Coroutines كتابة تعليمات برمجية غير متزامنة وغير حاجبة بأسلوب تسلسلي. وهي إجابة Kotlin عن أسلوب الاستدعاءات الراجعة والخيوط لتنفيذ مهام مثل عمليات الإدخال والإخراج عبر الشبكة وقاعدة البيانات.
دوال suspend
يمكن لدالة تحمل الوسم suspend أن تتوقف مؤقتاً من دون حجب الخيط، ثم تستأنف عملها لاحقاً. ولا يمكن استدعاؤها إلا من coroutine أو من دالة suspend أخرى.
suspend fun fetchUser(): User {
delay(1000) // non-blocking pause
return User(1, "Ada", "ada@x.com")
}التعليق مقابل الحجب
تعلّق delay عمل coroutine لكنها تحرر الخيط لمهام أخرى. أما Thread.sleep فتحجب الخيط بالكامل. وتفضّل Coroutines التعليق للحفاظ على الكفاءة.
إطلاق Coroutine
ابدأ coroutine باستخدام launch ضمن CoroutineScope. فهي تعمل بالتزامن ولا تُرجع نتيجة.
scope.launch {
val user = fetchUser()
println(user.name)
}الحصول على نتيجة باستخدام async
استخدم async عندما تحتاج إلى إعادة قيمة. فهي تُرجع كائناً من نوع Deferred تنتظر نتيجته باستخدام await.
val deferred = scope.async { fetchUser() }
val user = deferred.await()ما هو CoroutineScope؟
يحدد النطاق مدة حياة Coroutines التي يتم إطلاقها داخله. عند إلغاء النطاق، تُلغى جميع Coroutines التابعة له. وهذا ما يُسمى التزامن المنظم.
التزامن المنظم
بما أن Coroutines تعيش داخل نطاق، فلا يمكنها أن تتجاوز عمره عن طريق الخطأ. وهذا يمنع التسريبات؛ فعندما تختفي الشاشة، يُلغى نطاقها ويتوقف عملها.
الإلغاء
يؤدي إلغاء نطاق أو مهمة إلى طرح CancellationException عند نقطة التعليق التالية، ما يوقف coroutine بطريقة سليمة.
val job = scope.launch { /* work */ }
job.cancel() // stops it cooperativelyالإلغاء التعاوني
يجب أن تتعاون Coroutines مع الإلغاء؛ إذ ينبغي للحلقات الطويلة التي تستهلك المعالج التحقق من isActive أو استدعاء دالة suspend حتى يصبح الإلغاء نافذاً.
while (isActive) {
// do a chunk of work
}الاستثناءات في Coroutines
ينتقل الاستثناء غير المعالَج في launch إلى النطاق، ويلغي Coroutines الشقيقة له (ما لم تُستخدم SupervisorJob). عالج الأخطاء باستخدام try/catch أو CoroutineExceptionHandler.
لماذا تهم النطاقات في Android
يوفر Android نطاقات جاهزة مرتبطة بدورات حياة المكوّنات، مثل viewModelScope وlifecycleScope، بحيث تُلغى Coroutines تلقائياً في الوقت المناسب. وهذا هو موضوع الدرس التالي.
تحقق سريع
اختبر مدى فهمك لنطاقات Coroutines.
مراجعة
لقد تعلمت ما يلي:
- تتوقف دوال
suspendمؤقتاً من دون حجب الخيط. - تبدأ
launchعملاً لا ينتظر نتيجة؛ بينما تُرجعasyncنتيجة. - يحدد CoroutineScope مدة حياة Coroutines (التزامن المنظم).
- الإلغاء تعاوني.
الأسئلة الشائعة
هل درس «أساسيات Coroutine ونطاقاتها» مجاني؟
نعم — نص درس «أساسيات Coroutine ونطاقاتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات Coroutine ونطاقاتها»؟
شغّل coroutines ضمن النطاق المناسب تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟
لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات Coroutine ونطاقاتها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟
نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات Coroutine ونطاقاتها
- viewModelScope وDispatchers
- أساسيات Kotlin Flow
- StateFlow وSharedFlow