Menu
CoddyTech

לולאת פקודות: סיכום

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

challenge icon

אתגר

בינוני

השלם את מנהל המשימות באמצעות שתי פקודות דוח.

  1. בפקודה "pending", הדפס כל כותרת מתוך filterTasks(tasks, false).
  2. בפקודה "summary", קרא ל־printSummary(tasks).

לחץ על הפעלת הקוד: עם הקלט pending, summary, quit, הפלט מציג את Learn Luau types, Build a task manager ואת 1/3 tasks done.

נסו בעצמכם

-- המבנה שלפיו מוגדרת כל משימה במנהל
type Task = {
    id: number,
    title: string,
    done: boolean,
}
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},
}
-- צור משימה עם ה-id הפנוי הבא והוסף אותה לרשימה
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
-- סמן את המשימה עם ה-id הזה כהושלמה; ציין אם נמצאה משימה כזו
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
-- רשימה חדשה של המשימות שערך done שלהן תואם
local function filterTasks(list: {Task}, done: boolean): {Task}
    local result: {Task} = {}
    for _, t in ipairs(list) do
        if t.done == done then
            table.insert(result, t)
        end
    end
    return result
end
-- שורה אחת: כמה משימות הושלמו
local function printSummary(list: {Task}): ()
    local doneCount = 0
    for _, t in ipairs(list) do
        if t.done then
            doneCount += 1
        end
    end
    print(`{doneCount}/{#list} tasks done`)
end
-- נסה זאת
while true do
    local command = io.read()
    if command == nil or command == "quit" then
        break
    elseif command == "add" then
        local title = io.read()
        local added: Task = addTask(tasks, title)
        print(`Added task {added.id}: {added.title}`)
    elseif command == "list" then
        for _, t in ipairs(tasks) do
            if t.done then
                print(`[x] {t.title}`)
            else
                print(`[ ] {t.title}`)
            end
        end
    elseif command == "done" then
        local id: number = tonumber(io.read()) or 0
        if completeTask(tasks, id) then
            print(`Task {id} completed`)
        else
            print(`No task with id {id}`)
        end
    end
end

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

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