Assembler le tout
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 50 sur 73.
Défi
MoyenVotre éditeur contient déjà la boîte à outils complète : le type Task, le tableau tasks (trois tâches de départ), addTask, completeTask, filterTasks et printSummary.
Écrivez une boucle de commande qui lit continuellement une ligne avec io.read() et gère ces commandes :
add— lisez une ligne supplémentaire pour le titre, appelezaddTask, et affichez exactement :Added task {id}: {title}(en utilisant les champs de la tâche retournée)done— lisez une ligne supplémentaire, convertissez-la avectonumber(...) or 0, appelezcompleteTask; affichezTask {id} completedsi la fonction a retournétrue, sinonNo task with id {id}list— pour chaque tâche, affichez[x] {title}si elle est terminée, sinon[ ] {title}(notez l'espace)pending— affichez le titre de chaque tâche non terminée, en utilisantfilterTaskssummary— appelezprintSummary(tasks)quit— arrêtez la boucle (arrêtez également siio.read()renvoienil)
Essayez vous-même
-- La forme que chaque tâche du gestionnaire doit suivre
type Task = {
id: number,
title: string,
done: boolean,
}
-- La liste de tâches : un tableau typé de formes 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},
}
-- Construit une tâche typée avec le prochain id libre et l'insère
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
-- Marque la tâche avec l'id donné comme terminée ; signale le succès
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
-- Collecte les tâches dont le flag done correspond dans un nouveau {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
-- Affiche un résumé de progression en une ligne
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
-- Écris le code ici
-- Boucle de commandes : lit les lignes avec io.read() jusqu'à "quit" (ou nil).
-- Gère : add (lire le titre -> `Added task {id}: {title}`),
-- done (read id -> `Task {id} completed` / `No task with id {id}`),
-- list (`[x] {title}` / `[ ] {title}`),
-- pending (titres des tâches non terminées via filterTasks),
-- summary (printSummary)
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées7Projet : Gestionnaire de tâches typé
Projet : La structure d'une tâcheFonction pour ajouter une tâche2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps