Menu
Coddy logo textTech

Функция: Вывод сводки по задачам

Часть раздела Введение в Luau путешествия по Lua на Coddy — урок 49 из 73.

challenge icon

Задание

Легко

Ваш редактор уже содержит тип Task, массив tasks, а также addTask, completeTask и filterTasks из предыдущих уроков.

Создайте функцию с именем printSummary, которая принимает один параметр list типа {Task}, ничего не возвращает (тип возвращаемого значения ()) и выводит одну строку строго в следующем формате:

{doneCount}/{total} tasks done

где total — это #list, а doneCount — это количество задач, у которых done == true (посчитайте с помощью цикла).

Затем проверьте работу всего инструментария в следующем порядке:

  1. вызовите printSummary(tasks)
  2. вызовите completeTask(tasks, 2)
  3. вызовите printSummary(tasks)
  4. вызовите addTask(tasks, "Take a break")
  5. вызовите printSummary(tasks)

Попробуйте сами

-- Форма, которой должна соответствовать каждая задача в менеджере
type Task = {
    id: number,
    title: string,
    done: boolean,
}

-- Список задач: типизированный массив форм Task
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 совпадает, в новый {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

-- Напишите код здесь
-- 1) определите printSummary(list: {Task}): () выводящую
--    `{doneCount}/{total} tasks done`
-- 2) вызовите printSummary, завершите задачу 2, вызовите снова,
--    добавьте "Take a break", вызовите в последний раз

Все уроки раздела Введение в Luau