Menu
CoddyTech

Befehlsschleife: Übersicht

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 54 von 80.

challenge icon

Aufgabe

Mittel

Vervollständige den Aufgabenmanager mit zwei Befehlen für Berichte.

  1. Bei "pending" gib jeden Titel in filterTasks(tasks, false) aus.
  2. Bei "summary" rufe printSummary(tasks) auf.

Klicke auf Run Code: Bei der Eingabe pending, summary, quit zeigt die Ausgabe Learn Luau types, Build a task manager und 1/3 tasks done.

Probier es selbst

-- Die Struktur, der jede Aufgabe im Manager folgt
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},
}
-- Erstelle eine Aufgabe mit der nächsten freien id und füge sie der Liste hinzu
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
-- Markiere die Aufgabe mit dieser id als erledigt; gib an, ob eine gefunden wurde
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
-- Eine neue Liste der Aufgaben, deren done-Wert übereinstimmt
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
-- Eine Zeile: Wie viele Aufgaben erledigt sind
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
-- Probiere es aus
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

Alle Lektionen in Einführung in Luau

Übe selbstständig: Online-Luau-Compiler