Adicionando uma Tarefa
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 21 de 68.
Desafio
FácilCom base na sua fundação de gerenciamento de tarefas, agora você implementará a funcionalidade principal para adicionar novas tarefas ao seu sistema. Este desafio foca na criação de uma função que expande sua lista de tarefas anexando novas tarefas ao slice existente.
Nota Importante: Como os nomes das tarefas podem conter espaços (como "Buy groceries"), você precisará usar bufio.Scanner para ler linhas inteiras de entrada. A função fmt.Scanln para de ler no primeiro espaço, o que quebraria nomes de tarefas com espaços. Use bufio.NewScanner(os.Stdin) e chame scanner.Scan() seguido de scanner.Text() para ler linhas completas.
Você receberá duas entradas:
- Uma string representando o número de tarefas existentes (ex:
"2") - Uma string contendo nomes de tarefas separados por vírgulas (ex:
"Buy groceries,Call dentist,Finish project")
Sua tarefa é:
- Definir a mesma struct
Taskdo desafio anterior com os camposName(string) eCompleted(bool) - Criar uma função chamada
addTaskque recebe um slice de structsTaske um nome de tarefa (string) como parâmetros - A função
addTaskdeve retornar um novo slice com a tarefa adicionada (a nova tarefa deve terCompleteddefinido comofalse) - Usar
bufio.Scannerpara ler as linhas de entrada corretamente para lidar com nomes de tarefas com espaços - Criar um slice inicial de tarefas baseado no número de tarefas existentes especificado na primeira entrada:
- Se o número for
"0", comece com um slice vazio - Se o número for maior que
"0", crie essa quantidade de tarefas de marcação (placeholders) com nomes como"Existing Task 1","Existing Task 2", etc., todas marcadas como incompletas
- Se o número for
- Analisar (parse) os nomes das tarefas separados por vírgula da segunda entrada
- Usar sua função
addTaskpara adicionar cada nova tarefa ao slice - Imprimir cada tarefa no slice final no formato:
"Task: [name], Completed: [true/false]" - Imprimir o número total de tarefas no formato:
"Total tasks: [count]"
Por exemplo, se você tiver 1 tarefa existente e quiser adicionar "Buy groceries,Call dentist", sua saída deve mostrar a tarefa existente primeiro, seguida pelas duas novas tarefas e, finalmente, a contagem total. Este desafio pratica a manipulação de slices com a função append e demonstra como construir funcionalidades que estendem suas estruturas de dados.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Criar a função addTask aqui
func main() {
// Criar scanner para ler as linhas de entrada
scanner := bufio.NewScanner(os.Stdin)
// Ler o número de tarefas existentes
scanner.Scan()
existingTasksStr := scanner.Text()
// Ler os nomes das tarefas
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: Completar a implementação
// 1. Converter existingTasksStr para inteiro
// 2. Criar o slice inicial com as tarefas existentes
// 3. Analisar taskNamesStr e adicionar novas tarefas
// 4. Imprimir todas as tarefas e a contagem total
}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