Afficher toutes les tâches
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 22 sur 68.
Défi
FacileEn continuant avec votre système de gestion de tâches, vous allez maintenant implémenter la fonctionnalité permettant d'afficher toutes les tâches dans un format convivial. Ce défi se concentre sur l'itération à travers votre collection de tâches et la présentation de chaque tâche avec son statut d'achèvement à l'aide d'indicateurs visuels clairs.
Vous recevrez deux entrées :
- Une chaîne représentant le nombre de tâches (par exemple,
"4") - Une chaîne contenant les données des tâches au format :
"name1:status1,name2:status2,name3:status3"où le statut est soit"true"soit"false"(par exemple,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
Votre tâche consiste à :
- Définir la même structure
Taskdes défis précédents avec les champsName(string) etCompleted(bool) - Créer une fonction appelée
viewAllTasksqui prend une slice de structuresTasken paramètre - À l'intérieur de la fonction
viewAllTasks, itérer à travers la slice et afficher chaque tâche avec le format suivant :- Pour les tâches terminées :
"[x] [task_name]" - Pour les tâches incomplètes :
"[ ] [task_name]"
- Pour les tâches terminées :
- Analyser les données de tâche de la deuxième entrée pour créer votre slice de tâches :
- Diviser l'entrée par des virgules pour obtenir les entrées de tâches individuelles
- Pour chaque entrée, diviser par deux-points pour séparer le nom et le statut
- Convertir la chaîne de statut en un booléen (
"true"devienttrue,"false"devientfalse)
- Appeler votre fonction
viewAllTasksavec la slice créée - Après avoir affiché toutes les tâches, afficher un résumé au format :
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Par exemple, si vous avez les tâches "Buy groceries:false,Call dentist:true,Finish project:false", votre sortie doit afficher chaque tâche avec les cases à cocher appropriées, puis afficher le résumé avec le nombre total et les statistiques d'achèvement. Ce défi permet de pratiquer l'itération de slice, le formatage conditionnel avec des instructions if, et offre aux utilisateurs une vue claire de l'avancement de leurs tâches.
Essayez vous-même
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO : Implémenter la fonction pour afficher toutes les tâches
// Pour les tâches terminées : "[x] [task_name]"
// Pour les tâches incomplètes : "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO : Analyser les données de tâche à partir de la chaîne taskData
// Diviser par des virgules pour obtenir les entrées de tâches individuelles
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// Pour chaque entrée, diviser par deux-points pour séparer le nom et le statut
// Convertir la chaîne de statut en booléen et créer des structures Task
// TODO : Appeler la fonction viewAllTasks avec la tranche créée
// TODO : Calculer et afficher le résumé
// Format : "Total : [total_count] tâches ([completed_count] terminées, [incomplete_count] restantes)"
_ = tasks
_ = numTasks
}Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements