Menu
Coddy logo textTech

פונקציה: הצגת משימות לפי סטטוס

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 48 מתוך 73.

challenge icon

אתגר

קל

העורך שלך כבר מכיל את הטיפוס Task, את המערך tasks, את addTask ואת completeTask מהשיעורים הקודמים.

צור פונקציה בשם filterTasks שמקבלת שני פרמטרים:

  • list מטיפוס {Task}
  • done מטיפוס boolean

הפונקציה צריכה ליצור ולהחזיר מערך חדש מטיפוס {Task}, שמכיל רק את המשימות שהדגל done שלהן שווה לפרמטר.

לאחר מכן:

  1. שמור את filterTasks(tasks, false) במשתנה pending ואת filterTasks(tasks, true) במשתנה finished
  2. הדפס את #pending, ואז את הכותרת של כל משימה ממתינה בשורה נפרדת (השתמש ב-ipairs)
  3. הדפס את #finished, ואז את הכותרת של כל משימה שהושלמה בשורה נפרדת

נסו בעצמכם

-- The shape every task in the manager must follow
type Task = {
    id: number,
    title: string,
    done: boolean,
}

-- The task list: a typed array of Task shapes
local tasks: {Task} = {
    {id = 1, title = "Learn Luau types", done = false},
    {id = 2, title = "Build a task manager", done = false},
    {id = 3, title = "Write tests", done = true},
}

-- Build a typed task with the next free id and insert it
local function addTask(list: {Task}, title: string): Task
    local newTask: Task = {
        id = #list + 1,
        title = title,
        done = false,
    }
    table.insert(list, newTask)
    return newTask
end

-- Mark the task with the given id as done; report success
local function completeTask(list: {Task}, id: number): boolean
    for _, t in ipairs(list) do
        if t.id == id then
            t.done = true
            return true
        end
    end
    return false
end

-- Complete task 1, then try an id that doesn't exist
print(tasks[1].done)
print(completeTask(tasks, 1))
print(tasks[1].done)
print(completeTask(tasks, 99))

כל השיעורים ביחידה מבוא ל-Luau

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