Menu
CoddyTech

Boucle de commandes : lister et terminer

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 53 sur 80.

challenge icon

Défi

Moyen

Ajoute une commande qui liste les tâches et une autre qui les termine.

  1. Avec "list", affiche chaque tâche sous la forme `[x] {t.title}` lorsqu’elle est terminée, sinon sous la forme `[ ] {t.title}`.
  2. Avec "done", lis local id: number = tonumber(io.read()) or 0 ; affiche `Task {id} completed` si completeTask(tasks, id) est vrai, sinon `No task with id {id}`.

Appuie sur Run Code : avec les entrées done, 2, quit, la sortie affiche Task 2 completed.

Essayez vous-même

-- La structure que suit chaque tâche du gestionnaire
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},
}
-- Créer une tâche avec le prochain id disponible et l’ajouter à la liste
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
-- Marquer la tâche ayant cet id comme terminée ; indiquer si une tâche a été trouvée
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
-- Une nouvelle liste des tâches dont la valeur de done correspond
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
-- Une ligne : combien de tâches sont terminées
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
-- Essayer
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}`)
    end
end

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne