Menu
Coddy logo textTech

בדיקת מצב הקורוטינה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 52 מתוך 54.

כשעובדים עם קורוטינות, לעיתים קרובות צריך לדעת באיזה מצב נמצאת קורוטינה. האם היא פועלת כרגע? האם היא מושהית וממתינה לחידוש פעולתה? האם היא סיימה את הביצוע?

Lua מספקת את הפונקציה coroutine.status() כדי לענות על השאלות האלה.

הפונקציה coroutine.status() מקבלת קורוטינה כארגומנט ומחזירה מחרוזת המתארת את מצבה הנוכחי. יש שלושה מצבים אפשריים:

"suspended"הקורוטינה מושהית ב-yield() וניתן לחדש את פעולתה
"running"הקורוטינה פועלת כרגע
"dead"הקורוטינה סיימה את פעולתה ואי אפשר לחדש אותה

כך משתמשים בזה:

function task()
    coroutine.yield()
    print("Finishing")
end

local co = coroutine.create(task)
print(coroutine.status(co))  -- "suspended"

coroutine.resume(co)
print(coroutine.status(co))  -- "suspended" (מושהה ב-yield)

coroutine.resume(co)
print(coroutine.status(co))  -- "dead" (הסתיים)
challenge icon

אתגר

קל

כתבו פונקציה checkCoroutineLifecycle שמקבלת את resumeCount ומחזירה מחרוזת המציגה את הסטטוס של קורוטינה בנקודות שונות במחזור החיים שלה.

צרו קורוטינה שמבצעת yield פעם אחת ואז מסתיימת. בדקו ותעדו את הסטטוס שלה לאחר יצירתה, לאחר החידוש הראשון (כאשר היא מושהית ב-yield), ולאחר חידושים נוספים בהתאם ל-resumeCount.

לוגיקה:

  • צרו פונקציה שמבצעת yield למחרוזת "paused" פעם אחת ואז מסתיימת
  • עטפו את הפונקציה הזו בקורוטינה באמצעות coroutine.create()
  • בדקו את הסטטוס מיד לאחר היצירה באמצעות coroutine.status()
  • חדשו את הקורוטינה פעם אחת ובדקו שוב את הסטטוס שלה
  • חדשו את הקורוטינה פעמים נוספות בהתאם ל-resumeCount - 1 (מספר החידושים הכולל = resumeCount)
  • בדקו את הסטטוס הסופי לאחר כל החידושים
  • החזירו מחרוזת עם שלושת הסטטוסים בפורמט: initial: [status]\\nafter first resume: [status]\\nfinal: [status]

פרמטרים:

  • resumeCount (מספר): מספר הפעמים הכולל לחדש את הקורוטינה (מינימום 1)

ערך מוחזר: מחרוזת המציגה את הסטטוס של הקורוטינה בשלוש נקודות במחזור החיים שלה (מחרוזת). פורמט: initial: suspended\nafter first resume: suspended\nfinal: dead

נסו בעצמכם

function checkCoroutineLifecycle(resumeCount)
    -- כתבו כאן את הקוד
end
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Lua אונליין