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, затем title каждой задачи из pending на отдельной строке (используйте ipairs)
  3. выведите #finished, затем title каждой задачи из finished на отдельной строке

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

-- Форма, которой должна соответствовать каждая задача в менеджере
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

-- Напишите код здесь
-- 1) определите filterTasks(list: {Task}, done: boolean): {Task}
-- 2) создайте `pending` (done == false) и `finished` (done == true)
-- 3) выведите #pending и названия pending, затем #finished и
--    названия finished

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