Menu
CoddyTech

Fungsi: Mencetak Ringkasan Tugas

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 49 dari 73.

challenge icon

Tantangan

Mudah

Editor kamu sudah berisi tipe Task, array tasks, addTask, completeTask, dan filterTasks dari pelajaran sebelumnya.

Buat fungsi bernama printSummary yang menerima satu parameter, list bertipe {Task}, tidak mengembalikan apa pun (tipe return ()), dan mencetak satu baris dengan format persis:

{doneCount}/{total} tasks done

di mana total adalah #list dan doneCount adalah jumlah task yang memiliki done == true (hitung dengan perulangan).

Lalu gunakan seluruh perangkat ini, dengan urutan berikut:

  1. panggil printSummary(tasks)
  2. panggil completeTask(tasks, 2)
  3. panggil printSummary(tasks)
  4. panggil addTask(tasks, "Take a break")
  5. panggil printSummary(tasks)

Coba sendiri

-- 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

-- Collect the tasks whose done flag matches into a new {Task}
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

-- Split the list into pending and finished views
local pending: {Task} = filterTasks(tasks, false)
local finished: {Task} = filterTasks(tasks, true)

print(#pending)
for _, t in ipairs(pending) do
    print(t.title)
end

print(#finished)
for _, t in ipairs(finished) do
    print(t.title)
end

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online