Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إنشاء واستئناف الـ coroutine

جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 49 من 54.

الآن بعد أن فهمت ماهية الروتينات المساعدة (coroutines)، دعنا نتعلم كيفية إنشائها وتشغيلها فعلياً في Lua.

لإنشاء coroutine، تستخدم الدالة coroutine.create(). تأخذ هذه الدالة دالة عادية كمعامل لها وتغلفها في كائن coroutine. إليك الصيغة الأساسية:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

في هذه المرحلة، الكوروتين (coroutine) موجود ولكنه لم يبدأ في العمل بعد. لم يتم استدعاء الدالة myTask. لبدء تنفيذ الكوروتين فعلياً أو متابعته، تستخدم coroutine.resume():

coroutine.resume(co)

عندما تستدعي resume() على الـ coroutine للمرة الأولى، فإنه يبدأ التنفيذ من بداية دالته. إذا استمر الـ coroutine في العمل حتى النهاية دون توقف مؤقت، فإنه يكتمل ولا يمكن استئنافه مرة أخرى.

إليك مثال كامل:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- يطبع كلتا الرسالتين

يعمل الـ coroutine من البداية إلى النهاية دفعة واحدة. في الدرس القادم، ستتعلم كيفية جعل الـ coroutines تتوقف مؤقتًا في منتصف التنفيذ.

challenge icon

التحدي

سهل

اكتب دالة runSimpleCoroutine تأخذ message وتعيد المخرجات من coroutine يقوم بطباعة تلك الرسالة.

قم بإنشاء coroutine باستخدام coroutine.create() يغلف دالة تقوم بطباعة الرسالة المقدمة. ثم استخدم coroutine.resume() لتنفيذ الـ coroutine. يجب أن تعيد الدالة الرسالة التي تمت طباعتها.

المنطق:

  • قم بتعريف دالة تطبع معامل الرسالة
  • قم بإنشاء coroutine من تلك الدالة باستخدام coroutine.create()
  • قم باستئناف الـ coroutine باستخدام coroutine.resume()
  • أعد الرسالة التي تمت طباعتها

المعاملات:

  • message (string): الرسالة التي سيتم طباعتها بواسطة الـ coroutine

المخرجات: الرسالة التي تمت طباعتها بواسطة الـ coroutine (string)

ورقة مرجعية

لإنشاء coroutine، استخدم coroutine.create() مع دالة كوسيط لها:

function myTask()
    print("Hello from coroutine!")
end

local co = coroutine.create(myTask)

لبدء أو متابعة تنفيذ الـ coroutine، استخدم coroutine.resume():

coroutine.resume(co)

مثال كامل:

function greet()
    print("Starting...")
    print("Finishing!")
end

local co = coroutine.create(greet)
coroutine.resume(co)  -- يطبع كلتا الرسالتين

عند استدعاء resume() للمرة الأولى، يبدأ الـ coroutine في التنفيذ من البداية. إذا استمر في العمل حتى الاكتمال دون توقف، فلا يمكن استئنافه مرة أخرى.

جرّب بنفسك

function runSimpleCoroutine(message)
    -- اكتب الكود هنا
end
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow