Visualizando Todas as Tarefas
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 22 de 68.
Desafio
FácilContinuando com seu sistema de gerenciamento de tarefas, agora você implementará a funcionalidade para exibir todas as tarefas em um formato amigável ao usuário. Este desafio foca em iterar através de sua coleção de tarefas e apresentar cada tarefa com seu status de conclusão usando indicadores visuais claros.
Você receberá duas entradas:
- Uma string representando o número de tarefas (ex:
"4") - Uma string contendo os dados das tarefas no formato:
"name1:status1,name2:status2,name3:status3"onde o status é"true"ou"false"(ex:"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
Sua tarefa é:
- Definir a mesma struct
Taskdos desafios anteriores com os camposName(string) eCompleted(bool) - Criar uma função chamada
viewAllTasksque recebe um slice de structsTaskcomo parâmetro - Dentro da função
viewAllTasks, iterar pelo slice e imprimir cada tarefa com o seguinte formato:- Para tarefas concluídas:
"[x] [task_name]" - Para tarefas incompletas:
"[ ] [task_name]"
- Para tarefas concluídas:
- Analisar (parse) os dados das tarefas da segunda entrada para criar seu slice de tarefas:
- Dividir a entrada por vírgulas para obter as entradas de tarefas individuais
- Para cada entrada, dividir por dois-pontos para separar o nome e o status
- Converter a string de status para um booleano (
"true"torna-setrue,"false"torna-sefalse)
- Chamar sua função
viewAllTaskscom o slice criado - Após exibir todas as tarefas, imprimir um resumo no formato:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Por exemplo, se você tiver as tarefas "Buy groceries:false,Call dentist:true,Finish project:false", sua saída deve mostrar cada tarefa com as caixas de seleção apropriadas e, em seguida, exibir o resumo com a contagem total e as estatísticas de conclusão. Este desafio pratica a iteração de slices, formatação condicional com instruções if e fornece aos usuários uma visão clara do progresso de suas tarefas.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: Implementar a função para exibir todas as tarefas
// Para tarefas concluídas: "[x] [task_name]"
// Para tarefas incompletas: "[ ] [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: Analisar os dados das tarefas a partir da string taskData
// Dividir por vírgulas para obter entradas de tarefas individuais
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// Para cada entrada, dividir por dois pontos para separar nome e status
// Converter a string de status para booleano e criar as structs Task
// TODO: Chamar a função viewAllTasks com o slice criado
// TODO: Calcular e imprimir o resumo
// Formato: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos