Mohammad Laif
Mohammad Laif

@mohammadlaif

9 تغريدة 39 قراءة Feb 15, 2020
الفرق بين الدالة Function والكروتين Coroutine
ثرد يوضح الفروقات بين الاثنين بشكل مختصر وسهل. بالرغم من انهم من نفس الأصل Routine ولكن يوجد اختلاف جوهري يقسمها إلى قسمين.
#كوتلن
#برمجة
الأصل هو الروتين Routine! ففي الحياة الطبيعية يقصد به الدأب وهو تكرار نفس العمل يومياً حتى يصبح عادة. أما في النواة Kernel فيقصد به تلك الشفرات التي يتكرر تشغيلها دائماً لأداء مهام معينة. ينقسم إلى قسمين:
- الـ subroutine يمثل الدوال Function.
- الـ Coroutine يمثل الكروتين.
الدالة Function
الدالة تبدأ التنفيذ من السطر الأول وتنتهي في السطر الاخير عند عبارة الـ return ولابد لها أن ترجع قيمة. ماهو سيئ فيها إنها عندما تبدأ التنفيذ لاتتوقف إلا عند الانتهاء حتى لو تسببت في حجب الخيط الحاسوبي Thread.
إذن الدالة أنانية وغير متعاونة. لاتريد من الدوال الاخريات ان تبدأ التنفيذ إلا عندما تنتهي هي. فلو لدينا ٤ دوال تستغرق كل واحدة منهم ٥ ثواني, الرابعة حتى تنفذ تحتاج الى ان تنتظر ١٥ ثانية (هذا إذا لم تحجب إحداهن الخيط الحاسوبي و يتعطل البرنامج).
الكروتين Coroutine
أما الكروتين يبدأ التنفيذ من السطر الأول ولكنه يستطيع تأجيل نفسه عند اي سطر ويعطي قيمة! ليسمح بكروتين آخر أن يبدأ التنفيذ. ثم يستطيع الاستئناف من حيث مكان الشفرة والحالة والسطر الذي توقف عندها.
وهكذا يستطيع الكروتين التعاون مع كروتين آخر في أداء مهمة ما. بالتوقف المؤقت للسماح بالآخر بالعمل وهكذا دواليك إلى أن يأتي دوره مرة أخرى في مزاولة العمل.
هذه القدرة من التوقف المؤقت والاستئناف (مبدأ التأجيل Suspending) فتحت عدة أبواب منها:
- صنع شفرات برمجية متعاونة.
- تطبيق مبدأ التزامن الوهمي وذلك بالتوقف المستمر والتبديل بين المهام.
الكوتلن أخذت هذة القدرات (مبدأ التأجيل و التعاون بين الشفرات البرمجة) و دمجتهم مع API التزامن للجافا, لصنع لها API خاص للتزامن سمي بالـ Kotlin Coroutines.
كانت هذه مقتطفات بسيطة ومختصرة في درس جديد بإسم نظرة عامة على الكروتين على منصة عالم البرمجة @Pro3alam:
3alam.pro
#كوتلن
#برمجة

جاري تحميل الاقتراحات...