יצירה וחידוש של קורוטינה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 49 מתוך 54.
עכשיו, כשאתם מבינים מהן קורוטינות, בואו נלמד איך ליצור ולהריץ אותן בפועל ב-Lua.
כדי ליצור קורוטינה, משתמשים בפונקציה coroutine.create(). הפונקציה מקבלת פונקציה רגילה כארגומנט ועוטפת אותה באובייקט קורוטינה. הנה התחביר הבסיסי:
function myTask()
print("Hello from coroutine!")
end
local co = coroutine.create(myTask)בשלב הזה, הקורוטינה קיימת אבל עדיין לא התחילה לרוץ. הפונקציה myTask לא נקראה. כדי להתחיל בפועל או להמשיך את הביצוע של קורוטינה, משתמשים ב־coroutine.resume():
coroutine.resume(co)כשקוראים ל־resume() בקורוטינה בפעם הראשונה, היא מתחילה לפעול מתחילת הפונקציה שלה. אם הקורוטינה רצה עד הסוף בלי לעצור, היא מסתיימת ואי אפשר לחדש אותה שוב.
הנה דוגמה מלאה:
function greet()
print("Starting...")
print("Finishing!")
end
local co = coroutine.create(greet)
coroutine.resume(co) -- מדפיס את שתי ההודעותהקורוטינה רצה מתחילתה ועד סופה ברצף אחד. בשיעור הבא תלמדו איך לגרום לקורוטינות להשהות את הריצה באמצע הביצוע.
אתגר
קלכתבו פונקציה runSimpleCoroutine שמקבלת message ומחזירה את הפלט מקורוטינה שמדפיסה את ההודעה הזאת.
צרו קורוטינה באמצעות coroutine.create() שעוטפת פונקציה המדפיסה את ההודעה שסופקה. לאחר מכן השתמשו ב-coroutine.resume() כדי להפעיל את הקורוטינה. הפונקציה צריכה להחזיר את ההודעה שהודפסה.
לוגיקה:
- הגדירו פונקציה שמדפיסה את הפרמטר message
- צרו קורוטינה מהפונקציה הזאת באמצעות
coroutine.create() - חדשו את הקורוטינה באמצעות
coroutine.resume() - החזירו את ההודעה שהודפסה
פרמטרים:
message(מחרוזת): ההודעה שהקורוטינה תדפיס
ערך מוחזר: ההודעה שהקורוטינה הדפיסה (מחרוזת)
נסו בעצמכם
function runSimpleCoroutine(message)
-- כתבו כאן קוד
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאים3מושגים מתקדמים בפונקציות
החזרת ערכים מרוביםפונקציות עם מספר משתנה של ארגומנטים (...)פונקציות כערכים ממדרגה ראשונהפונקציות אנונימיותמהי סגירה (Closure)?סיכום – מטפל אירועים פשוט9קורוטינות למתחילים
מהי קורוטינה?יצירה וחידוש של קורוטינההשהיה באמצעות coroutine.yield()חידוש והשהיהבדיקת מצב הקורוטינהסיכום – מחולל מספריםסיכום – חישובי וקטוריםתרגלו בעצמכם: קומפיילר Lua אונליין