Mettere tutto insieme
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 50 di 73.
Sfida
MedioIl tuo editor contiene già il kit completo: il tipo Task, l’array tasks (tre attività iniziali), addTask, completeTask, filterTasks e printSummary.
Scrivi un ciclo di comandi che continui a leggere una riga con io.read() e gestisca questi comandi:
add: leggi un’altra riga come titolo, chiamaaddTaske stampa esattamente:Added task {id}: {title}(usando i campi dell’attività restituita)done: leggi un’altra riga, convertila contonumber(...) or 0, chiamacompleteTask; stampaTask {id} completedse ha restituitotrue, altrimentiNo task with id {id}list: per ogni attività, stampa[x] {title}se è completata, altrimenti[ ] {title}(nota lo spazio)pending: stampa il titolo di ogni attività incompleta, usandofilterTaskssummary: chiamaprintSummary(tasks)quit: interrompi il ciclo (interrompilo anche seio.read()restituiscenil)
Provalo tu
-- 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
-- Print a one-line progress summary
local function printSummary(list: {Task}): ()
local total = #list
local doneCount = 0
for _, t in ipairs(list) do
if t.done then
doneCount = doneCount + 1
end
end
print(`{doneCount}/{total} tasks done`)
end
-- Watch the summary change as the list evolves
printSummary(tasks)
completeTask(tasks, 2)
printSummary(tasks)
addTask(tasks, "Take a break")
printSummary(tasks)
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate7Progetto: Gestore di attività tipizzato
Progetto: La struttura dell'attivitàFunzione per aggiungere un'attività2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappeEsercitati da solo: Compilatore Luau online