Menu
Coddy logo textTech

Visualizando Todas as Tarefas

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 22 de 68.

challenge icon

Desafio

Fácil

Continuando 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 é:

  1. Definir a mesma struct Task dos desafios anteriores com os campos Name (string) e Completed (bool)
  2. Criar uma função chamada viewAllTasks que recebe um slice de structs Task como parâmetro
  3. 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]"
  4. 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-se true, "false" torna-se false)
  5. Chamar sua função viewAllTasks com o slice criado
  6. 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